2010-03-10 113 views
1

TL DR;在多個數組中排序和比較值的最有效方法是什麼?Javascript:多個數組循環

好的,所以我們假設一些常量來使整個事情變得簡單 var a = [1,2,3,4,5,6],b = [0,9,8,7,6 ,88,99,77],i,j;

現在,如果我想看看a中的任何值是否等於b中的任何其他值,那麼我必須對這些數組中的一個排序6次。這是很多工作,似乎應該有一個更有效的方法來做到這一點。對於那些需要在這裏視覺助手你(是的,我知道 - 和++我只是不喜歡用「時間):

for (i = a.length - 1; i > -1; i -= 1) { 
    for (j = b.length - 1; j > -1; j -= 1) { 
     if (a[i] === b[j]) { 
      return b[j]; 
     } 
    } 
}

在B數組被通過一次競選中的每個元素答:當然,有一種更有效的方式來完成這項任務?

-Akidi

+0

跆拳道是TL DR?我到處都能看到。 – 2010-03-10 05:26:42

+1

太長;沒看過 – rahul 2010-03-10 05:27:30

回答

3

取決於你輸入數組的大小(幾個權衡有) - 你的嵌套循環是最簡單的像您的例子小的輸入。

如果你有巨大的數組,並且可以控制它們的構造,考慮保留一個映射(JS中的對象)作爲一個查找集(如果你在循環中創建了a,你可以在平行)。

var setA = {}; 
for (int i = 0; i < a.length; i++) { 
    setA[a[i]] = true; 
} 

然後你就可以看到一組由剛剛檢查setA[是否存在的東西嗎? ]

同樣與B,或與兩者在一起等,根據您的需要。

+0

欣賞反饋,電腦壞掉了,所以很遺憾沒能及時表揚。會投票你的答案有用(以及下面的人),但顯然需要15名代表這樣做。好吧。 – Akidi 2010-03-14 02:24:08

+0

終於得到了15個代表^ ^所以兩個人都投了,就像我說過幾個月前那樣。 – Akidi 2010-06-09 08:59:55

1

也許這樣的事情可能有幫助嗎?

var a = [1, 2, 3, 9, 5, 0], b = [0, 9, 8, 7, 6, 88, 99, 77]; 
var a_dict = {}, l = a.length; 

for (var i=0; i < l; i++) { 
    a_dict[a[i]] = 1; 
} 

l = b.length; 
for (var i=0; i < l; i++) { 
    if(!!a_dict[b[i]]){ 
    console.log(b[i]); 
    } 
} 

你可以轉換一個數組「類似字典的」對象,並把它比其他...