10

我正在尝试在 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
}
4

7 回答 7

22
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)用来迭代数组。

于 2013-10-25T21:07:02.973 回答
4

另一种选择:

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] }), {})
于 2020-07-10T04:26:41.387 回答
1

你应该做下一个:

for (var i in input){
    var datuml = input[i];    
    if(!d[datuml.key]){
        d[datuml.key]=[];
    }
    d[datuml.key].push(datuml.val);
}
于 2013-10-25T21:20:41.120 回答
1

另一种方式,用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;

}, {});
于 2013-10-25T21:09:48.667 回答
0

请尝试以下方法:

        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));
于 2013-10-25T21:08:49.620 回答
0
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);
于 2013-10-25T21:15:21.073 回答
0

您将拥有超过 1 把钥匙?好吧,我认为您想要将 JSON 转换为 ArrayString 之类的东西。

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

ETC

于 2013-10-25T21:07:03.097 回答