2013-07-24 71 views
0

下面的函數如何能夠通過2維數組進行搜索?我無法弄清楚。我需要下面的例子來導致'['sainsburys']''。如何修改這個函數來比較二維數組?

感謝

Array.prototype.diff = function(a) { 
    return this.filter(function(i) {return !(a[0].indexOf(i[0]) > -1);}); 
}; 

var oldSupermarkets = [["asda"], ["tesco"], ["sainsburys"]]; 
var newSupermarkets = [["asda"], ["tesco"]]; 
+0

[在Javascript中比較兩個數組]可能的重複(http://stackoverflow.com/questions/7837456/comparing-two-arrays-in-javascript) – Barmar

+0

@Barmar不,它不是,這些數組是二維的,我我很確定答案會有很大的不同。 – jskidd3

+1

爲什麼它是一個2D數組 - 可能字符串不僅僅是字符串,也不是數組......作爲「包裝」。 –

回答

1

這你想要做什麼:

Array.prototype.diff = function(a) { 
    var b = a.map(function(x) { return x[0]; }); 
    return this.filter(function(x) { return b.indexOf(x[0]) == -1; }); 
}; 

我可以給你一個更準確的答案,如果你能告訴我們什麼的二維陣列respresent - 這將意味着什麼,如果內部數組有多個項目。目前他們看起來沒有必要,你可以將它們弄平並使用一維diff函數。

+0

非常感謝Bergi。我可以告訴你,每個子數組包含10個以上的項目,但是im搜索項目的索引是3號,所以我只需將x [0]換成x [3],對吧?再次感謝。 – jskidd3

+0

你能否給我舉一個例子,說明我可以如何在這個問題中使用這個函數?你是怎麼稱呼我的意思的。謝謝 – jskidd3

+0

如果你想比較他們的第四項的子陣列,那麼只需將'0'改爲'3',是的。要稱之爲「oldSupermarkets.diff(newSupermarkets)」 – Bergi