成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

js--數(shù)組hash法去重引發(fā)的json鍵名的思考

sarva / 762人閱讀

摘要:中的數(shù)組去重問題,被討論都快爛掉了。,法,根據(jù)對象的屬性不存在相同的特點,有點類似方法。同理這四個值都會被認為是一樣的而被去重。

js中的數(shù)組去重問題,被討論都快爛掉了。網(wǎng)上也有很多方法,不過都大同小異,復制來復制去的。
當然這里不是討論我是不是有什么新方法了,沒有,只是在實踐的時候發(fā)現(xiàn)一些問題,值得拿出來說說!
去重的思路有幾種

1,第一個與后面所有的比較,發(fā)現(xiàn)重復的就刪除掉,再取第二個與后面的比較,以此類推!
2,先排序,比較相鄰的。
3,創(chuàng)建臨時數(shù)組,原數(shù)組一個一個往里塞,若已存在就不塞了。
4,hash法,根據(jù)對象的屬性不存在相同的特點,有點類似方法3。
….

當然這些具體代碼網(wǎng)上很多,不一一列舉!下面來探討的是其中被人們忽略的一些問題。

方法1的代碼如下

function arrayUnique(arr){ 
    for (var i=0;i?arr.length;i++){
        for (var j=i+1;j?arr.length-1;j++){
            if ( arr[j] === arr[i] ){
                arr.splice(j,1);
                j--;
            }
        }

    }
    return arr;
}

方法4的hash方法如下

function arrayUnique2(arr){
    var hash = {};
    var temp = [];
    for (var i=0;i?arr.length;i++){
        if ( !hash[arr[i]] ){
            hash[arr[i]] = true;
            temp.push(arr[i]);
        }
    }
 /*
  for (var prop in hash){
   console.log(prop+"----"+typeof(prop))
 }
 */
    return temp;
}

雖然hash方法擁有非常搞的效率,但是存在一些問題,因為javascript中的數(shù)組是可以存儲任意數(shù)據(jù)類型的值,就是可以是數(shù)字、字符串、或者數(shù)組、對象、函數(shù)等等。

實際測試中確實可以去除長得一樣的數(shù)組或者對象,比如如下arr中的第四和第五個[1,2]會被去重,但問題來了。

var aa = "aa",bb = "bb";
var arr = [
    1,"1","abc",[1,2],[1,2],["1","2"],"1,2",["aa","bb"],[aa,bb],document,"[object HTMLDocument]",function (){return 1},function (){return 1;}
]
console.log(arrayUnique2(arr));//[1,"abc",[1,2],["aa","bb"],document,function (){return 1},function (){return 1;}]

如果兩個對象的引用不同即使長得一樣也不是全等的,這個我們知道,也可以說去掉長得相同的兩個元素。

于是我將hash對象的屬性跟屬性的數(shù)據(jù)類型在函數(shù)中輸出出來,發(fā)現(xiàn)對象屬性或json鍵名的數(shù)據(jù)類型都是字符串類型的,并且每個被添加的屬性,會被先隱式調(diào)用toString方法,即DOM中的document對象,變成對象的屬性即json的鍵名的時候,隱式調(diào)用toString方法,這樣就和"[object HTMLDocument]’是一樣的了,數(shù)組去重的話,后面字符串類型的[object HTMLDocument]會被去掉。

同理[1,2],[1,2],[‘1′,’2′],’1,2’這四個值都會被認為是一樣的而被去重。

數(shù)組最后面的兩個函數(shù),因為在后面的函數(shù)里加了個分號,否則也是相同。

所以會有這樣的結論,在使用hash方法的時候,數(shù)組元素變成對象屬性名或者json鍵名的時候,數(shù)據(jù)會先隱式調(diào)用toString方法變成字符串,然后成為對象的屬性。而這樣的后果就是,只要兩個元素各自調(diào)用toString方法后的字符串相等,兩個值遍認為是相同,即使兩個值根本不想等。

所以這種hash去重的方法有局限性,即在去除所有值的數(shù)據(jù)類型相同的情況下,他是效率很高很好用,但是數(shù)據(jù)類型不同的情況下。還是老老實實用其他方法比較吧。(當然一般后端傳到前端的數(shù)據(jù),數(shù)據(jù)類型一般都是相同的。)

以上就是我對去重中遇到問題的一些思考,希望對大家有幫助,網(wǎng)上的東西,不能盲目拿來就用,要有自己的思考。

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/82133.html

相關文章

  • 深入理解:ES6中Set和Map數(shù)據(jù)結構,Map與其它數(shù)據(jù)結構互相轉(zhuǎn)換

    摘要:學習筆記工作中常用到的語法只是簡單提及和,今天有空于是寫了這篇文章深入理解中的和數(shù)據(jù)結構,與其它數(shù)據(jù)結構的互相轉(zhuǎn)換。的提供了新的數(shù)據(jù)結構。本身是一個構造函數(shù),用來生成數(shù)據(jù)結構。 文中的內(nèi)容主要是來自于阮一峰的《ES6標準入門》(第三版)?!秾W習ES6筆記──工作中常用到的ES6語法》只是簡單提及Set和Map,今天有空于是寫了這篇文章──《深入理解:ES6中的Set和Map數(shù)據(jù)結構,M...

    Cristalven 評論0 收藏0
  • 【重溫基礎】11.Map和Set對象

    摘要:本文是重溫基礎系列文章的第十一篇。返回一個布爾值,表示該值是否為的成員。使用回調(diào)函數(shù)遍歷每個成員。與數(shù)組相同,對每個成員執(zhí)行操作,且無返回值。 本文是 重溫基礎 系列文章的第十一篇。 今日感受:注意身體,生病花錢又難受。 系列目錄: 【復習資料】ES6/ES7/ES8/ES9資料整理(個人整理) 【重溫基礎】1.語法和數(shù)據(jù)類型 【重溫基礎】2.流程控制和錯誤處理 【重溫基礎】3....

    meteor199 評論0 收藏0
  • ES6學習之 -- Set數(shù)據(jù)結構

    摘要:類似于數(shù)組,但是中不存在重復元素??梢越邮芤粋€數(shù)組或者其他具有接口的數(shù)據(jù)結構作為參數(shù)從上面的代碼可以看出有去重的功能。去重還有另一個方法將數(shù)據(jù)結構的數(shù)據(jù)轉(zhuǎn)換成數(shù)組。清除實例的指定成員。返回一個布爾值,表示某個值是否在實例之中。 Set Set類似于數(shù)組,但是Set中不存在重復元素。Set可以接受一個數(shù)組(或者其他具有itarable接口的數(shù)據(jù)結構)作為參數(shù) const set = ne...

    wawor4827 評論0 收藏0
  • ES6新增Set、Map數(shù)據(jù)結構

    摘要:數(shù)據(jù)類型基本用法提供了一種類似于數(shù)組的新的數(shù)據(jù)結構。實例屬性和方法本身是一個構造函數(shù),用來生成數(shù)據(jù)結構。返回一個布爾值,表示該值是否為的成員。任何具有接口且每個成員都是一個雙元素的數(shù)組的數(shù)據(jù)結構都可以當作構造函數(shù)的參數(shù)。 Set數(shù)據(jù)類型 基本用法 ES6 提供了一種類似于數(shù)組的新的數(shù)據(jù)結構 Set。它的成員的值都是唯一的,沒有重復的值。 const s = new Set(); [2...

    lentoo 評論0 收藏0
  • JS數(shù)據(jù)結構與算法_集合&字典

    摘要:上一篇數(shù)據(jù)結構與算法鏈表寫在前面說明數(shù)據(jù)結構與算法系列文章的代碼和示例均可在此找到一集合集合數(shù)據(jù)結構集合是一種包含不同元素的數(shù)據(jù)結構。集合中的元素成為成員。 上一篇:JS數(shù)據(jù)結構與算法_鏈表 寫在前面 說明:JS數(shù)據(jù)結構與算法 系列文章的代碼和示例均可在此找到 一、集合Set 1.1 集合數(shù)據(jù)結構 集合set是一種包含不同元素的數(shù)據(jù)結構。集合中的元素成為成員。集合的兩個最重要特性是:...

    sf_wangchong 評論0 收藏0

發(fā)表評論

0條評論

sarva

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<