Javascript 在对象数组中搜索对象时,是否有返回true或false的函数?
我正在寻找一种检查对象数组中是否存在对象的好方法。当所有键/值都存在于该数组中的同一对象中时,预期结果为真 我通过浏览stackoverflow找到的答案,就像使用jQuery.grep一样,或者返回找到的对象。我要寻找的是一个布尔结果(不是找到的对象) 我知道我可以循环所有数组元素,然后比较每个值……等等 但我的意思是,如果有一种方法可以像这样使用JS方法:Javascript 在对象数组中搜索对象时,是否有返回true或false的函数?,javascript,arrays,Javascript,Arrays,我正在寻找一种检查对象数组中是否存在对象的好方法。当所有键/值都存在于该数组中的同一对象中时,预期结果为真 我通过浏览stackoverflow找到的答案,就像使用jQuery.grep一样,或者返回找到的对象。我要寻找的是一个布尔结果(不是找到的对象) 我知道我可以循环所有数组元素,然后比较每个值……等等 但我的意思是,如果有一种方法可以像这样使用JS方法: var listofobjects=[ {id:1,name:“name 1”,分数:11}, {id:2,姓名:“姓名2”,分数:2
var listofobjects=[
{id:1,name:“name 1”,分数:11},
{id:2,姓名:“姓名2”,分数:22},
{id:3,姓名:“姓名3”,分数:33},
{id:4,姓名:“姓名4”,分数:44},
{id:5,姓名:“姓名5”,分数:55},
];
var isObjectExist=函数(搜索){
返回列表对象过滤器(函数(obj){
if(obj.id==search.id&&obj.name==search.name&&obj.score===search.score){
返回true;
}
返回false;
});
}
log(isObjectExist({id:3,name:“name 3”,score:33}));
//输出找到的对象[{id:3,name:“name 3”,score:33}]
log(isObjectExist({id:9,name:“name 3”,score:33}));
//输出空对象[]
方法:
some()方法检查数组中的任何元素是否通过
测试(作为功能提供)。some()方法执行该函数
数组中存在的每个元素一次:如果它找到数组
元素,其中函数返回真值,some()返回真值
(并且不检查剩余值)
我正在分享一个基于上述评论的示例,它可能会帮助其他人:
const listofobjects=[
{id:1,name:“name 1”,分数:11},
{id:3,姓名:“姓名3”,分数:33},
{id:2,姓名:“姓名2”,分数:22},
{id:3,姓名:“姓名3”,分数:33},
{id:4,姓名:“姓名4”,分数:44},
{id:5,姓名:“姓名5”,分数:55},
{id:3,姓名:“姓名3”,分数:33},
];
const search1={id:3,name:“name 3”,分数:33};
const search2={id:9,name:“name 3”,分数:33};
//使用Array.prototype.some()
const resSomeSearch1=listofobjects.some(item=>JSON.stringify(item)==JSON.stringify(search1));
log(`resSome(search1):${resSomeSearch1}`);//输出:真
const resSomeSearch2=listofobjects.some(item=>JSON.stringify(item)==JSON.stringify(search2));
log(`resSome(search2):${resSomeSearch2}`);//输出:假
//使用Array.prototype.filter()
常量resFilterSearch1=!!listofobjects.filter(item=>JSON.stringify(item)==JSON.stringify(search1)).length;
console.log(`resFilter(search1):${resFilterSearch1}`);//输出:真
常量resFilterSearch2=!!listofobjects.filter(item=>JSON.stringify(item)==JSON.stringify(search2)).length;
console.log(`resFilter(search2):${resFilterSearch2}`);//输出:假
//使用Array.prototype.find()
const resFindSearch1=!!查找(item=>JSON.stringify(item)==JSON.stringify(search1));
console.log(`resFind(search1):${resFindSearch1}`);//输出:真
const resFindSearch2=!!查找(item=>JSON.stringify(item)==JSON.stringify(search2));
console.log(`resFind(search2):${resFindSearch2}`);//输出:假
find()方法返回数组中满足提供的测试函数的第一个元素的值。否则将返回undefined。所以没有布尔结果
@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}
据我们所知,未定义
不是对象
,因此我们可以测试返回的结果:
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;
}
如果对象数组中存在对象,则返回布尔值
var listofobjects=[
{id:1,name:“name 1”,分数:11},
{id:2,姓名:“姓名2”,分数:22},
{id:3,姓名:“姓名3”,分数:33},
{id:4,姓名:“姓名4”,分数:44},
{id:5,姓名:“姓名5”,分数:55},
];
var对象={id:3,name:“name 3”,分数:33};
var booleanValue=listofobjects.filter((项)=>
item.id==object.id&&
item.name==object.name&&
item.score==object.score).长度>0
log({booleanValue})
这对我来说很有用:
const findInArray = (myArray, item) => {
!!myArray.find((el) => el == item)
};
那
呢!!arr.find(函数(){…})
See@zero298 find()方法返回数组中满足所提供测试函数的第一个元素的值。否则将返回undefined。因此,没有布尔结果。@zero298作业的错误函数,如果正在查找的实体具有错误的值,则将失败。我建议阅读数组的文档以查看所有函数,因为实际上没有那么多函数,这将在将来为您节省大量时间。