如何仅针对某些属性比较JavaScript中的对象

时间:2015-01-30 21:25:41

标签: javascript lodash

我有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;
&#13;
&#13;

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

你可以这样做(比较):

a[0].m == b[0].m

答案 1 :(得分:0)

您可以遍历数组,比较每个对象的mno值。

嵌套项目存在困难,这些项目还具有mno属性。在这种情况下,您可以在a[i].itemsb[i].items上递归调用该函数。

&#13;
&#13;
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;
&#13;
&#13;