我有一个对象数组,如下所示:
var arrayOfObjects = [
{
key_a : "value1",
key_b : "value2"
},
{
key_c : "value12",
key_d : "value23"
}
];
现在,我有另一个对象:
var objToCompare = {
key_a : "value1",
key_b : "value2"
};
有什么方法可以比较'objToCompare'和'arrayOfObjects'并从'arrayOfObjects'中删除匹配的对象 - 使用javascript或underscore js或lodash?
因此,结果对象的数组看起来像:
var arrayOfObjects = [
{
key_c : "value12",
key_d : "value23"
}
];
*当匹配所有属性时,只应从对象数组中删除对象。
答案 0 :(得分:2)
我找到了解决问题的简便方法。将objectToCompare转换为数组并使用_.differenceWith()
进行比较。
请检查下面的代码。
var _ = require('lodash')
var arrayOfObjects = [
{
key_a : "value1",
key_b : "value2"
},
{
key_c : "value12",
key_d : "value23"
}
]
var objToCompare = {
key_a : "value1",
key_b : "value2"
}
var arrayToCompare = []
arrayToCompare.push(objToCompare)
var result = _.differenceWith(arrayOfObjects, arrayToCompare, _.isEqual)
console.log(result)
答案 1 :(得分:1)
您可以使用_.reject和_.isEqual方法。这几乎与Underscore / Lodash中的_.where方法完全相反。
print queue
答案 2 :(得分:1)
纯javascript版本
desc='test'

答案 3 :(得分:0)
应该如此简单:
arrayOfObjects.filter((item) => !(item.key_a === objToCompare.key_a && item.key_b === objToCompare.key_b))
编辑:FWIW:这是一个纯粹的javascript解决方案,它只执行所需的并且无法有效地重新创建lodash / underscore isEqual
< / p>