2017-08-16 67 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