javascript - JavaScript中对象的多级嵌套

标签 javascript json javascript-objects

我想编写一个函数,它将一个 JavaScript 对象作为具有对象的选定属性的输入,并返回一个修改后的缩进/分组结构,如下所示。

var s1 = {
    "f01":{},
    "f02":{},
    "f03":{},
    "f04":{},
    "f05":{}
};


var s2 = indent_items(s1, ["f02", "f03", "f04"]);

s2应该这样构造

{
    "f01":{},
    "d01":{
        "f02":{},
        "f03":{},
        "f04":{}
    },
    "f05":{}
};


var s3 = indent_items(s2, ["f03", "f04"]);

s3 应该这样构造

{
    "f01":{},
    "d01":{
        "f02":{},
        "d02":{
            "f03":{},
            "f04":{}
        },
    },
    "f05":{}
};

等等深入许多层次。如何实现?

最佳答案

此解决方案具有递归缩进功能。

  • Object.keys 获取对象的所有key
  • Array.prototype.forEach 用于键的迭代

function indent_items(obj, array) {

    function recursion(o, r) {
        Object.keys(o).forEach(function (k) {
            if (~array.indexOf(k)) {
                r[id] = r[id] || {};
                r[id][k] = o[k];
                return;
            }
            if (typeof o[k] === 'object') {
                r[k] = r[k] || {}
                recursion(o[k], r[k]);
                return;
            }
            r[k] = o[k];
        });
    }

    var result = {},
        id = 'd' + ('0' + ++count).slice(-2);

    recursion(obj, result);
    return result;
}

var count = 0,
    s1 = { "f01": {}, "f02": {}, "f03": {}, "f04": {}, "f05": {} },
    s2 = indent_items(s1, ["f02", "f03", "f04"]),
    s3 = indent_items(s2, ["f03", "f04"]);

document.write('<pre>s1:' + JSON.stringify(s1, 0, 4) + '</pre>');
document.write('<pre>s2:' + JSON.stringify(s2, 0, 4) + '</pre>');
document.write('<pre>s3:' + JSON.stringify(s3, 0, 4) + '</pre>');

关于javascript - JavaScript中对象的多级嵌套,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33541012/

相关文章:

javascript - java webapplcaition 中 javascript 文件的缓存

javascript - 无法使用第 3 方 API 出现错误,因为请求的资源上不存在 'Access-Control-Allow-Origin' header

javascript - 在另一个 $.ajax 中调用 $.ajax 函数

java - 解析 JSON 响应?

javascript - 将键值对(数组中的值)添加到数组中的特定对象

javascript - 一次渲染多个 jQuery 对象

javascript - 将 JSON 复制为模板

javascript - 如何在 JavaScript 中创建具有不同变量的可重用函数

javascript - 如何检查值是否是数字

javascript - 在 HTML 中显示格式化的 JSON(大对象)