我有两个数组,例如,
数组 1:
deletedValuesfromArray =
[
{ "property_name": "Property three", "property_type": 4, "property_required": true, "property_origin": 2 },
{ "property_name": "rstywrtre", "property_type": 3, "property_required": true, "property_origin": 1 }
]
数组2:
normalArray =
[
{ "property_name": "Property one", "property_type": 4, "property_required": true, "property_origin": 1 },
{ "property_name": "Property two", "property_type": 5, "property_required": true, "property_origin": 1 },
{ "property_name": "Property three", "property_type": 4, "property_required": true, "property_origin": 2 },
{ "property_name": "rstywrtre", "property_type": 3, "property_required": true, "property_origin": 1 }
]
我想比较两个数组并过滤数组以在删除 deletedValuesfromArray
(数组 1)后获取新数组。
为此我尝试了以下方法,
let newArray = this.normalArray.filter(function (val) {
return this.deletedValuesfromArray.indexOf(val) == -1;
});
console.log(newArray);
但它不起作用..
预期输出是,
新数组
[
{ "property_name": "Property one", "property_type": 4, "property_required": true, "property_origin": 1 },
{ "property_name": "Property two", "property_type": 5, "property_required": true, "property_origin": 1 }
]
Stackblitz我已经尝试过了
这些值也不会是唯一的,它可能具有任何对象的完整副本。
如何比较并删除普通数组中删除的值并得到新数组?
最佳答案
您的 filter
谓词不起作用,因为您不能仅将 normalArray
中的对象与 deletedValuesfromArray
中的对象进行比较:
indexOf()
comparessearchElement
to elements of theArray
using strict equality (the same method used by the === or triple-equals operator).
换句话说,
{ "property_name": "Property one", "property_type": 4, "property_required": true, "property_origin": 1 } === { "property_name": "Property one", "property_type": 4, "property_required": true, "property_origin": 1 }
// > false
要使过滤器
工作,您需要实现一个比较函数。请参阅How to determine equality for two JavaScript objects?一些想法。
关于javascript - 从数组中删除已删除的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53301255/