2017-08-16 59 views
0

这是一个不错的夜间项目,但实际上我有些头疼。JS - 如何用字符串等对象构建动态嵌套对象

我需要的就是这样的例子功能:

result = set("itemCategories[0].items[0].name", "Test") 

应返回:

{ itemCategories: [ 
    { 
    items: [ {name: "Test"} ] 
    } 
}] 

...在给定的属性的情况下,“itemCategories [1] .items [ 2]。名称”这样的结果:

{ itemCategories: [ 
    null, 
    { 
    items: [ 
     null, 
     null, 
     {name: "Test"} 
    ] 
    } 
}] 
+0

您应该能[解决方案在这里]适应(https://stackoverflow.com/questions/6491463/accessing-nested-javascript-objects-with-string-key)至去做。 –

+1

为什么你需要传递一个字符串?为什么不瞄准只是做itemCategories [0] .items [0] .name =“Test”? – Shard

+0

@Shard该字符串是从另一个系统给出的 – Chilian

回答

1

使用lodash#set

result = lodash.set({}, "itemCategories[0].items[0].name", "Test") 
0

如果你问香草JavaScript Set方法,那么你可以这样做。

/* this is what you are trying to get. 
{ itemCategories: [ 
    { 
    items: [ {name: "Test"} ] 
    } 
}] 
*/ 

var mySet = new Set(); // your set object. 

创建您的数据(数字,文本,字符串,对象,数组,空值)。

ver data1 = 365; 
ver data2 = 'Dragonfly'; 
ver data3 = {name: 'Bobby', age: 20000, job: 'dj'}; 

然后,您只需使用其add方法添加到该设置。

mySet.add(data1); 
mySet.add(data2); 
mySet.add(data3); 

所以要得到你要找的你会写这个。

var itms = {items: [{name: 'test'}]}; 

mySet.add(itms); 

关于set的好处是它就像一个数组。所以你可以使用forEach。

mySet.forEach(function(val){ 
    console.log(val); // gets all your data. 
}); 

你甚至可以使用has方法检查数据是否在数据中。

mySet.has(365); // true 
mySet.has(36500000); as false 

JavaScript Set