Javascript 按多个属性检查对象数组

Javascript 按多个属性检查对象数组,javascript,arrays,json,object,lodash,Javascript,Arrays,Json,Object,Lodash,我有一个对象数组,我需要检查数组中是否已经存在类似的对象。 例如,是否存在具有相同make和model属性的对象(Ford Focus): 在这个数组中 [ { make: 'Ford', model: 'Focus', color: 'blue', year: 2008 }, { make: 'Ford', model: 'Mustang', color: 'red', year: 2011 }, {

我有一个对象数组,我需要检查数组中是否已经存在类似的对象。 例如,是否存在具有相同make和model属性的对象(Ford Focus):

在这个数组中

[
  {
    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
  }
]

我更喜欢ES6方法,但也可以使用lodash。Lodash有一些属性,但据我所知,它匹配整个对象(不只是所需的特定属性)或仅匹配一个属性。此外,我还需要类似于u.pullAllWith的东西,在这里我可以删除所有包含这些特定属性的对象(即删除所有包含Ford Focuss的对象)。

创建一个函数并使用
some
every
,下面的函数适用于您传入的任何键

功能存在(arr、obj等键){
返回arr.some(e=>keys.every(k=>e[k]&&obj[k]&&e[k]==obj[k]);
}
log(存在(arr,检查'make','model')

设arr=[
{
制作:'福特',
模型:“焦点”,
颜色:“蓝色”,
年份:2008
},
{
制作:'福特',
型号:“野马”,
颜色:“红色”,
年份:2011年
},
{
制造‘雪佛兰’,
型号:“Malibu”,
颜色:“蓝色”,
年份:2012年
},
{
制作:'福特',
模型:“焦点”,
颜色:'黑色',
年份:1999年
}
]
让我们检查={
制作:'福特',
模型:“焦点”,
颜色:“红色”,
年份:2016年
};
Javascript具有和

使用some()可以发现数组中的某些元素是否包含以下属性:

const containsFordFocus = cars.some( car =>  car.make === 'Ford' && car.model === 'Focus');
console.log(containsFordFocus); // true
使用过滤器可以排除某些元素:

const filteredArray = cars.filter( car => car.make !== 'Ford' && car.model !== 'Focus');
console.log(filteredArray); // [ { make: 'Chevy', model: 'Malibu', color: 'blue', year: 2012 } ]

您是否有任何已经尝试过的代码可以共享?我正在处理的实际代码比这个示例要复杂得多。我已经阅读了各种Lodash方法,一些和pullAllWith方法是我能找到的最接近我需要的方法。我还尝试使用.find和.findIndex,但无法使其正常工作。如果您的代码有问题,则可能会重复,然后具体询问,并发布您的尝试。仅仅说“我需要类似的东西”被认为不是一个好问题。@trincot我强烈反对。将来来到这里的任何人都将能够遵循这个例子,并从中学习,比我发布一个更长、更复杂的例子更快、更容易。没有必要发布一些需要更多解释和更多内容供大家阅读的内容。另外,如果我可以使用其中一个答案并将其与我的代码一起使用,那么这就解决了我的问题。这是发布问题的更好方法。这是动态过滤模式的最佳方法。谢谢
const containsFordFocus = cars.some( car =>  car.make === 'Ford' && car.model === 'Focus');
console.log(containsFordFocus); // true
const filteredArray = cars.filter( car => car.make !== 'Ford' && car.model !== 'Focus');
console.log(filteredArray); // [ { make: 'Chevy', model: 'Malibu', color: 'blue', year: 2012 } ]