Mat*_*ell -2 javascript arrays json object lodash
我有一个对象数组,我需要检查数组中是否已存在类似的对象。例如,是否存在具有相同品牌和型号属性的对象(福特福克斯):
{
make: 'Ford',
model: 'Focus',
color: 'red',
year: 2016
}
Run Code Online (Sandbox Code Playgroud)
在这个数组中?
[
{
make: 'Ford',
model: 'Focus',
color: 'blue',
year: 2008
},
{
make: 'Ford',
model: 'Mustang',
color: 'red',
year: 2011
},
{
make: 'Chevy',
model: 'Malibu',
color: 'blue',
year: 2012
},
{
make: 'Ford',
model: 'Focus',
color: 'black',
year: 1999
}
]
Run Code Online (Sandbox Code Playgroud)
我更喜欢 ES6 方法,但也可以使用 lodash。Lodash 有 _.some 但据我所知,它匹配整个对象(不仅仅是所需的特定属性)或仅匹配一个属性。此外,我需要类似 _.pullAllWith 的东西,我可以在其中删除包含这些特定属性的所有对象(即删除包含福特福克斯的所有对象)。
var cars = [
{
make: 'Ford',
model: 'Focus',
color: 'blue',
year: 2008
}, {
make: 'Ford',
model: 'Mustang',
color: 'red',
year: 2011
}, {
make: 'Chevy',
model: 'Malibu',
color: 'blue',
year: 2012
}, {
make: 'Ford',
model: 'Focus',
color: 'black',
year: 1999
}
];
Run Code Online (Sandbox Code Playgroud)
使用 some() 您可以查找数组中的某些元素是否包含该属性:
const containsFordFocus = cars.some( car => car.make === 'Ford' && car.model === 'Focus');
console.log(containsFordFocus); // true
Run Code Online (Sandbox Code Playgroud)
使用过滤器,您可以排除一些元素:
const filteredArray = cars.filter( car => car.make !== 'Ford' && car.model !== 'Focus');
console.log(filteredArray); // [ { make: 'Chevy', model: 'Malibu', color: 'blue', year: 2012 } ]
Run Code Online (Sandbox Code Playgroud)