JavaScript按键数组从对象提取值时出现filter不是函数报错
报错产生原因
filter()是JavaScript数组类型的内置实例方法,仅能在数组对象上调用。你代码中定义的colors是普通键值对对象(Object类型),本身不存在filter方法,因此调用时会抛出colors.filter is not a function的错误。
另外你原本的实现逻辑也存在偏差:对象的键值访问不需要遍历筛选,直接通过键名索引就能拿到对应值。
修复后的正确代码
直接通过对象[键名]的语法访问对应属性值,配合map遍历键名数组即可批量提取目标值:
var colors = { key1:"Red", key2:"Blue", key3:"Green", key4:"Black" } var keys = ["key1","key3","key4"] var result = keys.map((key) => { return colors[key] }) console.log(result) // 输出结果:["Red", "Green", "Black"]
如果要兼容键名在colors中不存在的场景,避免意外报错,可以使用可选链操作符做安全访问:
var result = keys.map(key => colors?.[key])
不存在的键对应位置会返回undefined,不会阻断代码运行。
内容的提问来源于stack exchange,提问作者C Sharper
相关产品推荐
相关产品推荐

