2014-09-03 98 views
0

这个小提琴显示了如何抓取不在数组中的元素,基于键值9在我的案例id)。Javascript - 基于键值获取两个基于键值的数组之间的差异而不使用Array.prototype.filter

http://jsfiddle.net/wgmz40ow/

这种溶液从这里取:Difference between two array of objects in JavaScript

之前发现解决方案,我试图用简单的for循环来与仅包括在a对象而不是在b数组结束。

有人可以不使用javascripts Array.prototype.filter函数提供解决方案吗?

编辑:在我的情况下,我特别想处理一个数组b总是数组a的子集。

我也陷入了嵌套循环的麻烦,但一旦我打破了内环伸到一个功能我能抢的解决方案非常迅速:

http://jsfiddle.net/xzy9Lyr0/

不幸的是,我明白为什么其他解决方案是最好的 - 我的将不会返回真正的差异,只有a而不是b中的元素,除非我连接两个返回的数组(http://jsfiddle.net/xzy9Lyr0/2/)。

+2

Trivially:写'过滤器'。无论如何,简单的for * * will *工作(过滤器只是一个在选择器函数应用于结果累加逻辑的循环顶部的花哨装饰)并且具有相同的复杂度,即O(n^2)。 – user2864740 2014-09-03 23:22:27

+1

请发布代码,您尝试使用for循环 – dc5 2014-09-03 23:22:30

+2

我们大多数人不会提供现成的解决方案。但是,如果您自己尝试,我们将帮助您解决遇到的任何具体问题。现在没有问题陈述,只是“给我代码”。 – Jon 2014-09-03 23:24:24

回答

0

下面是一个可能包含恶作剧痕迹的答案。

在通过学习扩大@乔恩呼吁理解的利益,这里有一个既简单又复杂的解决方案:

var bstr = JSON.stringify(b); 
for (var i = a.length - 1; i >= 0; i--) { 
    if (!~bstr.indexOf(JSON.stringify(a[i]))) { 
     c.push(a[i]); 
    } 
} 

享受!

编辑:修正错字。