我正在努力实现一些看似非常基本但却让我在最后几天发疯的事情。
我有一个简单的数组:["a","b","c","d","e"]
我想把它变成这样的嵌套JSON:
{"a":{"b":{"c":{"d":{"e":""}}}}}
循环使用它,我遇到了像#34这样的问题;如何在不删除它的情况下保存最后一个键来设置它"等等。
有没有人有想法?
答案 0 :(得分:4)
你可能遇到了问题,因为你在错误的方向上循环。尝试从里到外构建对象:
array.reduceRight(function(v, key) {
var o = {};
o[key] = v;
return o;
}, "")
或者,循环:
var val = "";
for (var i=array.length; i--; )
var o = {};
o[array[i]] = val;
val = o;
}
return val;
答案 1 :(得分:1)
这是一种方法,递归地:
function convertToNestedObject(arr) {
var result = {};
if (arr.length === 1) {
result[arr[0]] = '';
} else {
result[arr[0]] = convertToNestedObject(arr.slice(1, arr.length));
}
return result;
}
您可以将起始索引传递给函数,而不是使用slice
并创建数组的副本:
function convertToNestedObject(arr, startIndex) {
var result = {};
if (arr.length - startIndex === 1) {
result[arr[startIndex]] = '';
} else {
result[arr[startIndex]] = convertToNestedObject(arr, startIndex + 1);
}
return result;
}
答案 2 :(得分:0)
将当前元素作为键和空对象({}
)作为值。继续使用新插入的空对象。
function toNested(arr){
var nested = {};
var temp = nested;
for(var i=0; i<arr.length; i++){
temp[arr[i]] = {};
temp = temp[arr[i]];
}
return nested;
}