JavaScript对象数组按指定ID查找元素返回undefined问题求助
问题排查
你写的代码存在三个直接导致结果不符合预期的问题:
- 没有承接方法执行结果:代码里直接执行
myarray.filter(p => p.id === id);,没有把返回值赋值给任何变量,方法运行完结果就被丢弃了,根本没有可以读取的目标值 - 方法返回类型和使用预期不匹配:你本来想找单个目标对象,实际用的
filter方法——它的返回值是所有匹配规则的元素组成的新数组,不是单个对象,就算赋值了,直接把这个数组当对象读字段,自然会拿到异常值 - 初始选型偏差:你一开始说想用
find方法查目标,实际写的代码完全没用到这个方法;find的设计就是遍历数组返回第一个满足判断条件的元素,只有完全没匹配到的场景才会返回undefined
正确实现代码
const id = 2 // 用find匹配目标对象,把返回值赋值给变量方便后续使用 const targetObj = myarray.find(item => item.id === id)
若坚持使用
filter方法实现,因为它返回的是数组结构,需要取数组首位元素才能拿到单条匹配对象,写法如下:const targetObj = myarray.filter(item => item.id === id)[0]补充排查点:如果按上面写法还是返回
undefined,可以检查两点:
- 确认
myarray变量确实是你贴出来的对象数组结构,不是空值或者其他非数组类型- 确认数组里的
id字段类型和比对的id值类型完全一致(比如不要用字符串类型的"2"和数字类型的2做严格相等比对)
内容的提问来源于stack exchange,提问作者chtouk
相关产品推荐
相关产品推荐

