JavaScript中不使用循环检查对象数组内ID是否存在的方法
解决对象数组中ID存在性检查的问题
嘿,我懂你碰到的坑了——你原来用includes()的思路在一维数组里没问题,但放到对象数组里就失效了,这是因为includes()是用来匹配整个数组元素的,它会去clubs里找有没有完全等于3的元素,可你数组里的每个元素都是{id: x, name: y}的对象,自然找不到匹配项。
要实现你要的「单语句、不用显式循环」的检查,用Array.prototype.some()就完美解决:
var clubs = [ {id: 1, name : 'chelsea'}, {id: 2, name : 'city'}, {id: 3, name : 'liverpool'}, {id: 4, name : 'manchester united'}, {id: 5, name : 'arsenal'} ]; var selectedId = 3; // 单语句实现存在性判断 clubs.some(club => club.id === selectedId) ? console.log('The selected id exist') : console.log('The selected id does not exist');
为什么这个方法可行?
some()会在内部遍历数组(不用你手写for/while循环),只要找到任意一个满足条件的元素,就会立刻停止遍历并返回true;如果遍历完所有元素都没匹配,就返回false。正好符合你只需要判断「ID是否存在」的需求,而且完全是单语句的简洁写法。
如果之后你需要获取这个匹配的对象,还可以用clubs.find(club => club.id === selectedId),它会返回第一个匹配的对象(找不到则返回undefined),不过这次的场景下some()是最高效的选择。
内容的提问来源于stack exchange,提问作者moses toh
相关产品推荐
相关产品推荐

