首页 > 解决方案 > 如何比较过滤器的两个对象数组

问题描述

我想比较两个数组 obj 的过滤器如何过滤与另一个数组 obj 的对象完全不同的对象的数组?

  var y = [

     {  nb :'rouge',
        xb :'rouge',
        x  : 12 },

       { nb :'red',
         xb :'rouge',
         x  : 12 }
     ]
     ,

  var   x = [

       {  nb :'rouge',
          xb : 'rouge',
           x : 12,
       },

       {  nb :'red',
          xb : 'rouge',
          x  : 12,
       },

       {  nb :'violet',
          xb : 'violet',
          x  : 12,
        },

]

  const dispo = x.filter( x !== y );
  console.log(dispo)

预期结果 :

[ { nb:紫罗兰色,xb:'紫罗兰色',x:12}

]

标签: javascript

解决方案


您将需要按值比较对象。您可以使用 lodash 的 _.isEqual 或 _.isEqualDeep 之类的东西。没有 lodash 的简单方法是这样的:

function compare(a, b) 
{
  if (Object.keys(a).length !== Object.keys(b).length) {
    return false;
  }

  for (let p of Object.keys(a)) {
  
    if (!b.hasOwnProperty(p)) {
      return false;
    }
    
    if (a[p] !== b[p]) {
      return false
    }
    
  }
  
  return true;
}

function includesObj(array, obj) 
{
  for (let el of array) {
    if (compare(obj, el)) {
      return true;
    }
  }
  
  return false;
}  

console.log(x.filter(el => !includesObj(y, el)));

这不会做深度比较。只有当你的对象的值是基元(不是数组、函数、其他对象)时,它才会起作用。但在你的情况下,它也将起作用。


推荐阅读