【问题标题】:Append values to javascript dictionary将值附加到 javascript 字典
【发布时间】:2013-10-25 21:01:02
【问题描述】:

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

【问题讨论】:

  • hops 是什么?你不是说var datum = input[i];吗?附言不要将for..in 用于数组:stackoverflow.com/a/500531
  • 迭代input,查看d 是否对"key" 的每个值都有一个属性,如果没有,则使用该值给d 一个属性,并分配一个数组。然后将"val" 的值压入数组。
  • 啊,谢谢。我的错,错字。
  • JavaScript“字典”被称为对象。仅供参考。

标签: javascript


【解决方案1】:
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) 来遍历数组。

【讨论】:

  • 你比我快一点。完全相同的答案:)
【解决方案2】:

另一种选择:

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] }), {})

【讨论】:

  • 多么巧妙的解决方案。感谢您的帮助
【解决方案3】:

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

}, {});

【讨论】:

  • 对于新手来说可能不是最清晰的,但我喜欢它:)
  • @user1523882,是的,它可能不是,但我真的很喜欢利用reduce 函数的initialValue 来构建这样的映射。一旦你习惯了它就很好了,因为你可以在一个 external 语句中做到这一点。
【解决方案4】:

你应该做下一个:

for (var i in input){
    var datuml = input[i];    
    if(!d[datuml.key]){
        d[datuml.key]=[];
    }
    d[datuml.key].push(datuml.val);
}

【讨论】:

    【解决方案5】:

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

    检查此Convert JSON To Array Javascript 还有这个How to convert JSON object to JavaScript array

    等

    【讨论】:

      【解决方案6】:

      请尝试以下方法:

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

      【讨论】:

        【解决方案7】:
        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);
        

        【讨论】:

          猜你喜欢
          • 2018-12-27
          • 2016-12-30
          • 2023-02-24
          • 2021-05-17
          • 2017-11-15
          • 1970-01-01
          • 2021-12-21
          • 2012-02-14
          • 1970-01-01
          相关资源
          最近更新 更多