我正在寻找一种检查对象数组中是否存在对象的好方法。当所有键/值存在于该数组中的同一对象中时,预期结果为true。
我通过浏览stackoverflow找到的答案,如使用jQuery.grep或Find object by id in an array of JavaScript objects的Find a value in an array of objects in Javascript返回找到的对象。我正在寻找的是一个布尔结果(不是找到的对象)。
我知道我可以循环所有数组元素,然后比较每个值....等
但我的意思是,如果有一种方法可以使用这样的JS方法:
var listOfObjecs = [
{id: 1, name: "Name 1", score: 11},
{id: 2, name: "Name 2", score: 22},
{id: 3, name: "Name 3", score: 33},
{id: 4, name: "Name 4", score: 44},
{id: 5, name: "Name 5", score: 55},
];
var isObjectExist = function(search){
return listOfObjecs.filter(function(obj){
if(obj.id===search.id && obj.name===search.name && obj.score===search.score){
return true;
}
return false;
});
}
console.log( isObjectExist({id: 3, name: "Name 3", score: 33}) );
//outputs the found object [{id: 3, name: "Name 3", score: 33}]
console.log( isObjectExist({id: 9, name: "Name 3", score: 33}) );
//outputs an empty object []
这是因为:
filter()方法创建一个新数组,其中包含所有传递由提供的函数实现的测试的元素。
如果没有本机JavaScript方法(返回true或false),如何更新isObjectExist()
函数以返回true或false?
some()方法检查数组中的任何元素是否通过测试(作为函数提供)。 some()方法对数组中存在的每个元素执行一次函数:如果找到函数返回true值的数组元素,some()返回true(并不检查其余值)
我根据上面的评论分享了一个例子,它可以帮助其他人:
const listOfObjecs = [
{ id: 1, name: "Name 1", score: 11 },
{ id: 3, name: "Name 3", score: 33 },
{ id: 2, name: "Name 2", score: 22 },
{ id: 3, name: "Name 3", score: 33 },
{ id: 4, name: "Name 4", score: 44 },
{ id: 5, name: "Name 5", score: 55 },
{ id: 3, name: "Name 3", score: 33 },
];
const search1 = { id: 3, name: "Name 3", score: 33 };
const search2 = { id: 9, name: "Name 3", score: 33 };
// Using Array.prototype.some()
const resSomeSearch1 = listOfObjecs.some(item => JSON.stringify(item) === JSON.stringify(search1));
console.log(`resSome(search1): ${resSomeSearch1}`); // outputs: true
const resSomeSearch2 = listOfObjecs.some(item => JSON.stringify(item) === JSON.stringify(search2));
console.log(`resSome(search2): ${resSomeSearch2}`); // outputs: false
// Using Array.prototype.filter()
const resFilterSearch1 = !!listOfObjecs.filter(item => JSON.stringify(item) === JSON.stringify(search1)).length;
console.log(`resFilter(search1): ${resFilterSearch1}`); // outputs: true
const resFilterSearch2 = !!listOfObjecs.filter(item => JSON.stringify(item) === JSON.stringify(search2)).length;
console.log(`resFilter(search2): ${resFilterSearch2}`); // outputs: false
// Using Array.prototype.find()
const resFindSearch1 = !!listOfObjecs.find(item => JSON.stringify(item) === JSON.stringify(search1));
console.log(`resFind(search1): ${resFindSearch1}`); // outputs: true
const resFindSearch2 = !!listOfObjecs.find(item => JSON.stringify(item) === JSON.stringify(search2));
console.log(`resFind(search2): ${resFindSearch2}`); // outputs: false
试试这个:
!!arr.find(function(){...})