javascript - 如何比较过滤器的两个对象数组

标签 javascript

我想比较两个数组 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}

]

最佳答案

您需要按值比较对象。您可以使用 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)));

这不会做深入的比较。仅当对象的值是基元(而不是数组、函数或其他对象)时,它才有效。但在你的情况下它也可以工作。

关于javascript - 如何比较过滤器的两个对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61033845/

相关文章:

javascript - 使用 JavaScript 随机化 html 标签

javascript - Chrome 被检测为带有 javascript 的 Safari

javascript - 如何在 JavaScript 中使用现有变量?

javascript - 扩展 ng2-pdf-viewer 以支持在 pdf 上绘图的方法?

javascript - 什么 "terminating characters"一般会保证后面的javascript运行?

javascript - 如何防止 fs.writeFile 覆盖现有文件?

javascript - 根据项目被调用的次数映射集合

javascript - 如何在忽略冠词 (A, an, the) 的同时对 javascript 数组进行排序?

javascript - 'return this' 在增加类型时会做什么?

javascript - 重用SAPUI5控件