如何在JS中检查指定值是否恰好匹配数组对象中某一项的name属性值
解决方案
推荐直接使用JS数组内置的some()方法实现需求,该方法会遍历数组,只要存在任意一个元素满足判断条件就立即返回true,同时停止后续遍历,性能优于全量遍历方案,且完全不需要提前感知数组长度:
// 核心判断逻辑 const hasMatch = person.some(item => item.name === match) const result = hasMatch ? "Do something" : "Blank"
其他可选方案
如果除了判断是否存在匹配项,还需要获取到匹配的那个元素,可以使用find()方法:
const matchedItem = person.find(item => item.name === match) const result = matchedItem ? "Do something" : "Blank" // 后续可直接使用matchedItem的其他属性,比如matchedItem.surname
如果需要兼容不支持ES6箭头函数的旧运行环境,可以使用ES5写法:
var hasMatch = person.some(function(item) { return item.name === match }) var result = hasMatch ? "Do something" : "Blank"
原实现的问题
你原来的写法手动指定了数组索引,存在两个明显风险:
- 硬编码索引完全无法适配数组长度变化的场景,新增/减少数组元素都要手动修改判断逻辑
- 示例中你写了
person[3].name,但原数组长度为2,索引最大值为1,访问不存在的索引会得到undefined,容易触发隐式类型转换错误或者运行时报错
内容的提问来源于stack exchange,提问作者za stacka2345
相关产品推荐
相关产品推荐

