将值附加到javascript字典

将值附加到javascript字典,javascript,Javascript,我试图用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

我试图用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(变量i=0;i

仅供参考,您不应该使用
for(输入中的var i)
来迭代数组。

您将拥有多于1个键? 嗯,我想您需要类似于将JSON转换为ArrayString的东西

检查这个 还有这个


etc

请尝试以下操作:

        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-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={};
对于(变量i=0;i
另一种方法,使用
减少

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;

}, {});

你应该做下一步:

for (var i in input){
    var datuml = input[i];    
    if(!d[datuml.key]){
        d[datuml.key]=[];
    }
    d[datuml.key].push(datuml.val);
}
另一种选择:

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}]
常量dict={}
input.forEach(({key,val})=>
输入dict?输入dict[key]。按下(val):输入dict[key]=[val])

控制台日志(dict)跳数是多少?你的意思是不是
var-datum=input[i]?注意不要使用
for..在
for数组中:迭代
输入
,查看
d
是否为
“key”
的每个值都有一个属性,如果没有,则使用该值为
d
提供一个属性,并分配一个数组。然后将
“val”
的值推入数组。啊,谢谢。我的错,打字错误。JavaScript“字典”称为对象。仅供参考。你比我快一点。同样准确的答案:)对于新手来说可能不是最清晰的,但我喜欢:)@user1523882,是的,可能不是,但我真的喜欢利用reduce函数的
initialValue
来构建这样的映射。一旦你习惯了它,它就很好了,因为你可以在一个外部语句中完成它。多好的解决方案啊。谢谢你的帮助
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);
}