2013-07-24 72 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