Javascript 如何比较过滤器的两个对象数组
我想比较两个数组obj 过滤器 如何过滤对象与另一个数组对象完全不同的数组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)您需要按值比较对
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)例如