JavaScript如何访问数组内对象属性并遍历比较值是否匹配变量
数组对象属性匹配校验实现方法
你当前仅判断了数组索引为0的首个元素,要覆盖数组所有对象的id匹配校验,可根据实际场景选择以下实现方式:
方案1:仅判断是否存在匹配项(性能最优)
直接使用数组原生some()方法,该方法遍历到任意一个满足匹配条件的元素时就会终止遍历、返回布尔值true,全程无多余性能消耗:
// 示例数组 let myArr = [{ id: 1, x: 120, y: 150, }, { id: 2, x: 170, y: 420, }, { id: 3, x: 160, y: 220, }, { id: 4, x: 140, y: 170, }]; // 自定义待匹配的变量 let myVar = 2; // 执行校验 const hasMatched = myArr.some(item => item.id == myVar); if (hasMatched) { // 存在匹配项时执行对应逻辑 // do something }
方案2:判断存在性同时获取匹配到的对象
如果匹配后需要操作对应对象的x、y等其他属性,使用find()方法,该方法会返回第一个符合匹配条件的完整对象,无匹配项时返回undefined:
let myVar = 3; const matchedItem = myArr.find(item => item.id == myVar); if (matchedItem) { // 可直接读取匹配对象的其他属性,比如 matchedItem.x、matchedItem.y console.log('匹配到的对象坐标:', matchedItem.x, matchedItem.y); }
方案3:获取所有id匹配的对象集合
如果数组内可能存在多个id重复的对象,需要拿到全部匹配项,使用filter()方法,返回值是所有符合条件的对象组成的新数组:
let myVar = 1; const matchedList = myArr.filter(item => item.id == myVar); if (matchedList.length > 0) { // 存在匹配项,可遍历matchedList处理所有符合条件的对象 }
方案4:基础for循环写法(全环境兼容)
如果需要兼容不支持ES6+语法的老旧运行环境,可使用最基础的for循环遍历,找到匹配项后可手动break终止遍历:
let myVar = 4; let isMatched = false; for (let i = 0; i < myArr.length; i++) { if (myArr[i].id == myVar) { isMatched = true; // 找到匹配项后终止循环,避免无效遍历 break; } } if (isMatched) { // 匹配成功执行逻辑 }
注意:如果确定id和myVar的类型完全一致,建议使用严格相等运算符
===代替==,避免隐式类型转换引发的判断错误。
内容的提问来源于stack exchange,提问作者W4IT
相关产品推荐
相关产品推荐

