简体   繁体   English

将值附加到 javascript 字典

[英]Append values to javascript dictionary

I am trying to create the following data structure in javascript:我正在尝试在 javascript 中创建以下数据结构:

d = {"foo": [3, 77, 100], "bar": [10], "baz": [99], "biff": [10]}

My starting data structure is aa list of dictionaries:我的起始数据结构是一个字典列表:

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]

How can I generate my desired data structure?如何生成所需的数据结构? The following code doesn't seem to append values to the value array.以下代码似乎没有将值附加到值数组。

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);
}

FYI, you shouldn't use for (var i in input) to iterate over an array.仅供参考,您不应该使用for (var i in input)来迭代数组。

Another alternative:另一种选择:

 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);

And a one-liner, with immutability和一个单线,具有不变性

input.reduce((dict, { key, val }) => ({ ...dict, [key]: [...dict[key] || [], val] }), {})

Another way, with reduce .另一种方式,使用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;

}, {});

you will have more then 1 key?你会有更多的钥匙吗? Well, I think you want something like convert JSON to ArrayString.好吧,我认为您想要将 JSON 转换为 ArrayString 之类的东西。

Check this Convert JSON To Array Javascript and this How to convert JSON object to JavaScript array检查这个Convert JSON To Array Javascript和这个How to convert JSON object to JavaScript array

etc等等

Please try the following:请尝试以下操作:

        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);

You should be do the next:你应该做下一个:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM