我正在寻找好方法来检查对象数组中是否存在对象。当所有键/值都存在于该数组中的同一对象中时,预期结果为真。
通过浏览像Find object by id in an array of JavaScript objects这样使用 jQuery.grep 或Find a value in an array of objects in Javascript的stackoverflow找到的答案将返回找到的对象。我正在寻找的是布尔结果(不是找到的对象)。
我知道我可以遍历所有数组元素,然后比较每个值......等等。
但我的意思是,如果有一种方法可以使用这样的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?
答案 0 :(得分:12)
some()方法检查数组中的任何元素是否通过了 测试(作为函数提供)。 some()方法执行该函数 对于数组中存在的每个元素一次:如果找到一个数组 函数返回true值的元素,some()返回true (并且不检查剩余值)
答案 1 :(得分:1)
find()方法返回满足提供的测试功能的数组中第一个元素的值。否则,返回未定义。因此没有布尔结果。
@AlaDejbali对他的帖子的评论。
让我们看一下这个数组:
var arr = [{
name: "Ala",
age: 20,
},
{
name: "Jhon",
age: 22,
},
{
name: "Melissa",
age: 12,
},
];
当然,find()
返回数组内部的整个对象,但这取决于您在find内部的实现函数,例如:
function findObject(arr, value) {
if (Array.isArray(arr)) {
return arr.find((value) => {
return value.age === 20;
});
}
}
当我们这样调用此函数时:
console.log(findObject(arr, 20));
结果将为:
{name: "Ala", age: 20}
据我们所知undefined
不是object
,因此我们可以测试返回的结果:
function findObject(arr, value) {
const element = arr.find((value) => {
return value.age === 20;
});
return typeof element === "object" ? true : false;
}
或通过其他方式:
function findObject(arr, value) {
const element = arr.find((value) => {
return value.age === 20;
});
return typeof element === "undefined" ? false : true;
}
答案 2 :(得分:1)
这对我有用:
const findInArray = (myArray, item) => {
!!myArray.find((el) => el == item)
};
答案 3 :(得分:0)
我正在分享一个基于以上评论的示例,它可能会帮助其他人:
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
答案 4 :(得分:0)
如果对象存在于对象数组中,则返回布尔值。
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 object = { id: 3, name: "Name 3", score: 33 };
var booleanValue = listOfObjecs.filter((item) =>
item.id === object.id &&
item.name === object.name &&
item.score === object.score).length > 0
console.log({booleanValue})
答案 5 :(得分:-1)
尝试一下:
!!arr.find(function(){...})