Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在对象数组中搜索对象时,是否有返回true或false的函数?_Javascript_Arrays - Fatal编程技术网

Javascript 在对象数组中搜索对象时,是否有返回true或false的函数?

Javascript 在对象数组中搜索对象时,是否有返回true或false的函数?,javascript,arrays,Javascript,Arrays,我正在寻找一种检查对象数组中是否存在对象的好方法。当所有键/值都存在于该数组中的同一对象中时,预期结果为真 我通过浏览stackoverflow找到的答案,就像使用jQuery.grep一样,或者返回找到的对象。我要寻找的是一个布尔结果(不是找到的对象) 我知道我可以循环所有数组元素,然后比较每个值……等等 但我的意思是,如果有一种方法可以像这样使用JS方法: var listofobjects=[ {id:1,name:“name 1”,分数:11}, {id:2,姓名:“姓名2”,分数:2

我正在寻找一种检查对象数组中是否存在对象的好方法。当所有键/值都存在于该数组中的同一对象中时,预期结果为真

我通过浏览stackoverflow找到的答案,就像使用jQuery.grep一样,或者返回找到的对象。我要寻找的是一个布尔结果(不是找到的对象)

我知道我可以循环所有数组元素,然后比较每个值……等等

但我的意思是,如果有一种方法可以像这样使用JS方法:

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作业的错误函数,如果正在查找的实体具有错误的值,则将失败。我建议阅读数组的文档以查看所有函数,因为实际上没有那么多函数,这将在将来为您节省大量时间。