JavaScript 中对象的多级嵌套
Mutli-level nesting of objects in JavaScript
我想编写一个函数,该函数将 JavaScript 对象作为输入,其中包含对象的选定属性和 return 修改后的 indented/grouping 结构,如下所示。
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
获取对象的所有键
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 对象作为输入,其中包含对象的选定属性和 return 修改后的 indented/grouping 结构,如下所示。
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
获取对象的所有键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>');