Javascript反射:获取嵌套对象路径

时间:2015-08-21 13:15:57

标签: 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");

我试图从我的'person'对象构造一个不属于'object'类型的对象值数组。

因此数组看起来像:

[['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);

3 个答案:

答案 0 :(得分:8)

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

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的行为。

这似乎是存储对象密钥的一种奇怪方式。我想知道你在未来的“进一步使用”是什么。

答案 1 :(得分:1)

我在github上找到了以下解决方案。

https://github.com/mariocasciaro/object-path

答案 2 :(得分:0)

这对我有用。请注意,首先创建raw映射,然后mappedjoinitemsArray的{​​{1}}。

.

祝你好运...