You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用ES5语法在嵌套对象中查找特定属性并返回其值

如何用ES5语法在嵌套对象中查找指定属性并返回值?

先帮你排查下之前ES6代码的问题:当递归找到source属性时,你返回的是具体的属性值(比如"Spain"),但后续判断递归结果时用了=== true——如果属性值不是布尔值true,这个判断就不成立,程序会继续遍历其他属性,最后返回false,这就是明明存在属性却返回错误结果的原因。

接下来是符合你需求的ES5实现,核心思路是深度优先遍历整个嵌套对象结构,找到目标属性就返回它的值,遍历完所有层级都找不到就返回false:

function findPropertyValue(obj, targetKey) {
    // 先判断当前对象是否有效(null/undefined直接返回false)
    if (obj == null || typeof obj !== 'object') {
        return false;
    }

    // 遍历当前对象的所有键
    var keys = Object.keys(obj);
    for (var i = 0; i < keys.length; i++) {
        var key = keys[i];
        var value = obj[key];

        // 如果当前键就是目标键,直接返回对应的值
        if (key === targetKey) {
            return value;
        }

        // 如果当前值是对象(排除null,因为typeof null === 'object'),递归查找
        if (typeof value === 'object' && value !== null) {
            var result = findPropertyValue(value, targetKey);
            // 如果递归找到了值,就返回它(不用继续遍历剩余属性)
            if (result !== false) {
                return result;
            }
        }
    }

    // 所有层级都遍历完没找到目标属性,返回false
    return false;
}

测试你的示例数据

我们用你提供的三个对象来验证这个函数的效果:

var first_data = { area: "South", code: "S265", info: { category: "enhanced", label: "AB | 27AS53", variable: "VR" }, list: { area: "Mid", details: [ { source: "Spain", totals: 12, products: [ { name: "ABC", brand: "Nobrand", id: "111", category: "Men", } ] } ] }, time: 1654775446138 };
var second_data = { area: "South", code: "S265", info: { category: "enhanced", label: "AB | 27AS53", variable: "VR" }, list: { area: "Mid", details: [ { products: [ { name: "ABC", brand: "Nobrand", id: "111", category: "Men", _new: { source: "Spain", totals: 12 } } ] } ] }, time: 1654775446138 };
var third_data = { area: "South", code: "S265", info: { category: "enhanced", label: "AB | 27AS53", variable: "VR" }, list: { area: "Mid", details: [ { products: [ { name: "ABC", brand: "Nobrand", id: "111", category: "Men" } ] } ] }, time: 1654775446138 };

console.log(findPropertyValue(first_data, 'source')); // 输出 "Spain"
console.log(findPropertyValue(second_data, 'source')); // 输出 "Spain"
console.log(findPropertyValue(third_data, 'source')); // 输出 false

关键细节说明

  • 特殊值处理:单独判断null和undefined,避免递归到无效值上
  • 效率优化:递归找到结果后立即返回,无需遍历剩余属性
  • 纯ES5语法:使用var声明变量、普通for循环遍历键数组,完全兼容ES5环境

内容的提问来源于stack exchange,提问作者rimed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 23:32:49