【发布时间】:2017-01-30 19:26:33
【问题描述】:
我正在寻找一种好方法来检查对象是否存在于对象数组中。当所有键/值都存在于该数组的同一对象中时,预期结果为真。
我通过浏览 stackoverflow 找到的答案,如使用 jQuery.grep 或 Find a value in an array of objects in Javascript 的 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?
【问题讨论】:
-
!!arr.find(function(){...});怎么样?见Array.find() -
@zero298 find() 方法返回数组中满足提供的测试函数的第一个元素的值。否则返回未定义。所以没有布尔结果。
-
@zero298 作业的错误函数,如果正在寻找的实体具有虚假值,则会失败。
-
我建议通读数组的文档以查看所有函数,因为确实没有那么多,而且将来会为您节省大量时间。
标签: javascript arrays