Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何比较过滤器的两个对象数组_Javascript - Fatal编程技术网

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

Javascript 如何比较过滤器的两个对象数组,javascript,Javascript,我想比较两个数组obj 过滤器 如何过滤对象与另一个数组对象完全不同的数组 var y=[ {nb:'胭脂', xb:“胭脂”, x:12}, {nb:'红色', xb:“胭脂”, x:12} ] , 变量x=[ {nb:'胭脂', xb:‘胭脂’, x:12, }, {nb:'红色', xb:‘胭脂’, x:12, }, {nb:'violet', xb:‘紫罗兰’, x:12, }, ] 常量dispo=x.filter(x!==y); console.log(dispo)您需要按值比较对

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

var y=[
{nb:'胭脂',
xb:“胭脂”,
x:12},
{nb:'红色',
xb:“胭脂”,
x:12}
]
,
变量x=[
{nb:'胭脂',
xb:‘胭脂’,
x:12,
},
{nb:'红色',
xb:‘胭脂’,
x:12,
},
{nb:'violet',
xb:‘紫罗兰’,
x:12,
},
]
常量dispo=x.filter(x!==y);

console.log(dispo)
您需要按值比较对象。你可以使用像lodash的u.isEqual或u.Isequaldep这样的东西。没有lodash的简单方法如下:

功能比较(a、b)
{
if(Object.keys(a).length!==Object.keys(b).length){
返回false;
}
对于(设p为对象键(a)){
如果(!b.hasOwnProperty(p)){
返回false;
}
如果(a[p]!==b[p]){
返回错误
}
}
返回true;
}
功能包括obj(数组,obj)
{
for(让el表示数组){
如果(比较(obj,el)){
返回true;
}
}
返回false;
}  

console.log(x.filter(el=>!includesObj(y,el))不能简单地比较javascript中的两个对象,因为比较的是引用而不是这些对象的值

您可以查看此链接了解以下内容:

如果你喜欢简单而不是深刻,并且你放在de-array中的对象并不复杂,你可以试试Json.stringify(),它将你的对象转换成字符串,这样比较起来就容易了

注意,在下一个示例中,为了便于阅读,我更改了数组的顺序和名称

var firstArray = [
  {
    nb: 'rouge',
    xb: 'rouge',
    x: 12,
  },

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

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

var secondArray = [
  {
    nb: 'rouge',
    xb: 'rouge',
    x: 12
  },

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

function difference(firstArray, secondArray) {
  return firstArray.filter(firstArrayElement => {
    return !isContainedInSecondArray(firstArrayElement, secondArray);
  });
}

function isContainedInSecondArray(firstArrayElement, secondArray) {
  return secondArray.find(secondArrayElement => {
    if (JSON.stringify(firstArrayElement) == JSON.stringify(secondArrayElement)) {
      return true;
    }
  });
}

//prints [ { nb: 'violet', xb: 'violet', x: 12 } ]
console.log(difference(firstArray, secondArray));
//prints []
console.log(difference(secondArray, firstArray));


你能解释一下最终目的吗?是否要按对象引用或对象属性进行筛选?你想要提取的对象可以在数组中的任何位置?为什么你想要一个只有一个对象的数组?这样做不是更好吗:{nb:violet,xb:'violet',x:12}?@jogarcia这是一个示例,目的是能够在表2中排除与第1个相同的元素table@Lievno最终目标是拥有一个数组,该数组排除与另一个数组相同的元素:!==xb&&!==nb(来自表y)例如