Javascript 反射 : Get nested objects path

标签 javascript javascript-objects

在这个 stackoverflow 线程中,我了解到您可以通过一个简单的字符串获取对象路径。

Accessing nested JavaScript objects with string key

考虑以下几点:

var person = { name: "somename", personal: { weight: "150", color: "dark" }};

var personWeight = deep_value(person,"personal.weight");

我试图从我的“人”对象构造一个不是“对象”类型的对象值数组。

因此数组看起来像:

[['name', []],['personal.weight', []],['personal.color', []]];

我希望他们以那种形式查看,因为我以后会进一步使用它。

这是我试过的:

var toIterate = { name: "somename", personal: { age: "19", color: "dark" } }

var myArray = [];

$.each(toIterate, recursive);

function recursive(key, value) {         

    if (key !== null) {
        myArray.push([key, []]);
    }
    else {
        $.each(value, recursive);
    }
}

console.log(myArray);

最佳答案

只需使用递归来遍历对象。

var person = {
    name: "somename",
    personal: {
        weight: "150",
        color: "dark",
        foo: {
            bar: 'bar',
            baz: 'baz'
        },
        empty: {
        }
    }
};

// however you want to do this
var isobject = function(x){
    return Object.prototype.toString.call(x) === '[object Object]';
};

var getkeys = function(obj, prefix){
    var keys = Object.keys(obj);
    prefix = prefix ? prefix + '.' : '';
    return keys.reduce(function(result, key){
        if(isobject(obj[key])){
            result = result.concat(getkeys(obj[key], prefix + key));
        }else{
            result.push(prefix + key);
        }
        return result;
    }, []);
};

var keys = getkeys(person);

document.body.innerHTML = '<pre>' + JSON.stringify(keys) + '</pre>';

然后使用 Array.prototype.map 将键数组修改为您喜欢的格式。 请注意 person.personal.empty 的行为。

这看起来确实是一种存储对象键的奇怪方式。我想知道您的“ future 的进一步用途”是什么。

关于Javascript 反射 : Get nested objects path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32141291/

相关文章:

javascript - 从 mongo 返回的对象中过滤/返回单个嵌套对象(findOne)

javascript - 清除 jQuery 对话框在打开时验证

javascript - 如何测试一个空的 JavaScript 对象?

javascript - 无法设置 null 的属性 'innerHTML' 为什么我会收到此错误

javascript - 将 JSON 对象作为字符串分配给 Javascript 中对象的属性

javascript - 如何使用 google map api 自动完成功能添加额外结果?

javascript - 在 JavaScript 单元测试中重用代码的最佳方法

javascript - HTML通过链接下载文件

javascript - 如何找到两个 JavaScript 对象数组之间的差异?

javascript - 以英寸为单位的数量转换为英尺、厘米或码 Javascript