如何在含数组的JavaScript对象中查找指定key对应的value?
嵌套对象指定key值查找方法实现
原有代码问题
forEach循环的return只会终止当前单次回调执行,无法跳出整个循环,也无法将值返回给外层的getKeyValueFromObject函数- 函数最后返回空对象
{},不符合key不存在时返回undefined的要求 - 用
this调用自身如果该函数不是类的方法,会出现this指向错误导致调用失败 - 没有处理非对象类型的边界值,遇到数组内的基础类型元素时会触发运行报错
正确实现代码
function getKeyValueFromObject(obj, searchKey) { // 过滤null和非对象类型,直接返回未找到 if (obj === null || typeof obj !== 'object') return undefined // 优先判断当前层级是否存在目标key if (Object.prototype.hasOwnProperty.call(obj, searchKey)) { return obj[searchKey] } // 遍历所有属性值递归查找 for (const val of Object.values(obj)) { const findResult = getKeyValueFromObject(val, searchKey) if (findResult !== undefined) { return findResult } } // 全路径未找到返回undefined return undefined }
效果验证
首先修正你给出的示例OBJ的语法问题(属性之间遗漏逗号)后运行测试:
var OBJ = { code: 42, item1: [{ id: 1, name: 'foo' }, { id: 2, city: 'NY', name: 'bar' }], thing: [{ id: 14, name: 'foo' }, { id: 5, street: 'E43', name: 'pub' }] }; console.log(getKeyValueFromObject(OBJ , 'street')) // 输出 'E43' console.log(getKeyValueFromObject(OBJ , 'dog')) // 输出 undefined
内容的提问来源于stack exchange,提问作者Dhruv Rathod
相关产品推荐
相关产品推荐

