[英]Append values to javascript dictionary
我正在嘗試在 javascript 中創建以下數據結構:
d = {"foo": [3, 77, 100], "bar": [10], "baz": [99], "biff": [10]}
我的起始數據結構是一個字典列表:
input = [{"key": "foo", "val": 3}, {"key": "bar", "val": 10}, {"key": "foo", "val": 100}, {"key": "baz", "val": 99}, {"key": "biff", "val": 10}, {"key": "foo", "val": 77]
如何生成所需的數據結構? 以下代碼似乎沒有將值附加到值數組。
var d = {}
for (var i in input) {
var datum = input[i];
d[datum.key] = datum.val
}
for (var i = 0; i < input.length; i++) {
var datum = input[i];
if (!d[datum.key]) {
d[datum.key] = [];
}
d[datum.key].push(datum.val);
}
僅供參考,您不應該使用for (var i in input)
來迭代數組。
另一種選擇:
const input = [{ "key": "foo", "val": 3 }, { "key": "bar", "val": 10 }, { "key": "foo", "val": 100 }, { "key": "baz", "val": 99 }, { "key": "biff", "val": 10 }, { "key": "foo", "val": 77 }] const dict = {} input.forEach(({ key, val }) => key in dict ? dict[key].push(val) : dict[key] = [val] ) console.log(dict);
和一個單線,具有不變性
input.reduce((dict, { key, val }) => ({ ...dict, [key]: [...dict[key] || [], val] }), {})
另一種方式,使用reduce
。
var d = input.reduce(function (res, item) {
var key = item.key;
if (!res[key]) res[key] = [item.val];
else res[key].push(item.val);
return res;
}, {});
你會有更多的鑰匙嗎? 好吧,我認為您想要將 JSON 轉換為 ArrayString 之類的東西。
檢查這個Convert JSON To Array Javascript和這個How to convert JSON object to JavaScript array
等等
請嘗試以下操作:
var input = [{ "key": "foo", "val": 3 }, { "key": "bar", "val": 10 }, { "key": "foo", "val": 100 }, { "key": "baz", "val": 99 }, { "key": "biff", "val": 10 }, { "key": "foo", "val": 77 }];
var d = {};
for (var i = 0; i < input.length; i++) {
var entry = input[i];
if (d[entry.key] === undefined) d[entry.key] = [];
d[entry.key].push(entry.val);
}
alert(JSON.stringify(d));
var result = {}
input.forEach(function(keyObject){
//Make array for key if doesn't exist
result[keyObject.key] = result[keyObject.key] ? result[keyObject.key] : [];
//Add value to array
result[keyObject.key].push(keyObject.val);
});
console.log(result);
你應該做下一個:
for (var i in input){
var datuml = input[i];
if(!d[datuml.key]){
d[datuml.key]=[];
}
d[datuml.key].push(datuml.val);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.