我有2个数组如下:
a = [
{id:item, m:1, n:11, o:111},
{id:item, m:2, n:21, o:211},
{id:item, m:3, n:31, o:311},
{id:'group', items:[
{id:item, m:4, n:41, o:411},
{id:item, m:5, n:51, o:511}]
}
];
b = [
{id:item, m:1, n:11, o:111, p:101},
{id:item, m:2, n:21, o:211, p:121},
{id:item, m:3, n:31, o:311, p:131},
{id:'group', items:[
{id:item, m:4, n:41, o:411, p:141},
{id:item, m:5, n:51, o:511, p:151}]
}
];
我需要将这些数组与m,n,o列进行相等比较。如何以最佳方式做到这一点?此处预期的输出为真,因为这些字段具有相同的值。
var a = [
{id:'item', m:1, n:11, o:111},
{id:'item', m:2, n:21, o:211},
{id:'item', m:3, n:31, o:311},
{id:'group', items:[{id:'item', m:4, n:41, o:411},
{id:'item', m:5, n:51, o:511},
]}
];
var b = [
{id:'item', m:1, n:11, o:111, p:101},
{id:'item', m:2, n:21, o:211, p:121},
{id:'item', m:3, n:31, o:311, p:131},
{id:'group', items:[{id:'item', m:4, n:41, o:411, p:141},
{id:'item', m:5, n:51, o:511, p:151},
]}
];
var output = _.isEqual(a,b);
$('.res').text(output);

<div class='res'>Arrays Equal?</div>
&#13;
非常感谢任何帮助。
答案 0 :(得分:1)
你可以这样做(比较):
a[0].m == b[0].m
答案 1 :(得分:0)
您可以遍历数组,比较每个对象的m
,n
和o
值。
嵌套项目存在困难,这些项目还具有m
,n
和o
属性。在这种情况下,您可以在a[i].items
和b[i].items
上递归调用该函数。
function equals(a,b) {
for(var i = 0 ; i < a.length ; i++) {
if(a[i].items) {
if(!equals(a[i].items, b[i].items)) {
return false;
}
}
else if(a[i].m !== b[i].m || a[i].n !== b[i].n || a[i].o !== b[i].o) {
return false;
}
}
return true;
} //equals
var a = [
{id:'item', m:1, n:11, o:111},
{id:'item', m:2, n:21, o:211},
{id:'item', m:3, n:31, o:311},
{id:'group', items:[
{id:'item', m:4, n:41, o:411},
{id:'item', m:5, n:51, o:511}
]}
];
var b = [
{id:'item', m:1, n:11, o:111, p:101},
{id:'item', m:2, n:21, o:211, p:121},
{id:'item', m:3, n:31, o:311, p:131},
{id:'group', items:[
{id:'item', m:4, n:41, o:411, p:141},
{id:'item', m:5, n:51, o:511, p:151}
]}
];
alert(equals(a,b));
&#13;