function read(a) {
    var key = Object.keys(a)[0];
    if (!key) {
        return {}
    } else if (!key.includes(";")) {
        var inkey = a[key];
        delete a[key]
        return read(Object.assign({}, inkey, a))
    } else {
        console.log(key)
        delete a[key]
        return read(a);
    }
}

var locations = {
    "buildings":{
        "3;":{"name":"Market"},
        "8;":{"name":"Free car"},
        "9;":{"name":"House"}
    },
    "people":{
        "males":{
            "16;":{
                "name":"John",
                "items":{
                    "food":1,
                    "water":1
                }
            }
        }
    }
}
read(locations);


函数read(locations)按预期执行,并打印每个数字。

我将如何查找最接近包含前几个键的设置数字的内容。

例如:如果最接近数字的是“ John”(数字16),则我还需要对象位于“ males”和“ people”中,而不仅仅是数字中的所有内容。

我可以使用与read()类似的函数来获取数字“之后”的任何内容(以便在存在名称和项目的情况下),尽管我想记住前面的键。

最佳答案

您可以为对象的路径添加变量。



function read(a, path) {
    if (!a || typeof a !== 'object') {
        return {};
    }
    Object.keys(a).forEach(function (key) {
        if (key.includes(";")) {
            console.log(key, path.join(', '));
            return read(a[key], path || []);
        }
        read(a[key], (path || []).concat(key));
    });
}

var locations = { buildings: { "3;": { name: "Market" }, "8;": { name: "Free car" }, "9;": { name: "House" } }, people: { males: { "16;": { name: "John", items: { food: 1, water: 1 } } } } };

read(locations);

关于javascript - 还记得以前的 key 吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40743595/

10-10 13:50