[英]Create nested Javascript Object dynamically
我有一個.
(點)分隔的字符串,我要從中創建嵌套的JSON對象。 字符串的長度不是固定的。 例如,
var string = 'a.b.c.d';
然后,我的JSON對象應如下所示:
a: {
b: {
c:{
d: {
//Some properties here.
}
}
}
}
我試過下面的代碼:
var packageName = "a.b.c.d"
var splitted = packageName.split('.');
var json = {};
for(var i=0;i<splitted.length-1;i++){
json[splitted[i]] = splitted[i+1];
}
但這又回來了
{
a: 'b',
b: 'c',
c: 'd'
}
但這不是我想要的。 我也在google上搜索,發現了類似的問題,但是沒有解決方案可以解決我的問題。 例如這個 。
一個很好的reduce
用例
packageName = "abcd"; initProps = {hi: 'there'}; obj = packageName.split('.').reduceRight((o, x) => ({[x]: o}), initProps); console.log(JSON.stringify(obj))
如果您發現循環更易於使用,則可以將循環簡明地寫為
result = {};
ptr = result;
for (let prop of packageName.split('.'))
ptr = ptr[prop] = {};
您每次都需要創建一個新對象,並將其歸因於最后創建的對象。 一直到splitted.length
而不是splitted.length - 1
,因為您使用的是<
,不是<=
。
var packageName = "abcd"; var splitted = packageName.split('.'); var json = {}; var current = json; for (var i = 0; i < splitted.length; i++) { current[splitted[i]] = {}; current = current[splitted[i]]; } console.log(json);
您可以將最后分割的部分用作某些有效負載的屬性。
我建議保留對象引用,並在必要時使用臨時變量來加速創建新屬性。
請避免對未字符串化的對象使用JSON 。
var packageName = "abcd", splitted = packageName.split('.'), result = {}, temp = result, i; for (i = 0; i < splitted.length - 1; i++) { temp[splitted[i]] = temp[splitted[i]] || {}; temp = temp[splitted[i]]; } temp[splitted[i]] = { some: 'data' }; console.log(result);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.