【问题标题】:How to map over an array and generate an object istead of an array? [duplicate]如何映射数组并生成对象而不是数组? [复制]
【发布时间】:2017-07-31 13:48:54
【问题描述】:

我想要这个代码:

var arr = [
    { key: 'foo', val: 'bar' },
    { key: 'hello', val: 'world' }
];

var result = arr.map((i) => ([i.key]: i.val)); //something like this

console.log(result);

返回:

{foo: 'bar', hello: 'world'}

这在 ECMA6 中可行吗?

【问题讨论】:

    标签: javascript arrays object ecmascript-6


    【解决方案1】:

    Array#map 方法用于生成新数组。要减少为单个对象,请使用Array#reduce 方法。

    var arr = [{
        key: 'foo',
        val: 'bar'
      },
      {
        key: 'hello',
        val: 'world'
      }
    ];
    
    // define the property and return the object reference
    // where define the initial value as an empty object for result
    var result = arr.reduce((obj, o) => (obj[o.key] = o.val, obj), {}); 
    
    console.log(result);

    【讨论】:

    • 它说您的 sn-p 中有语法错误。
    • @WasteD : 我认为你的浏览器不支持 ES6 箭头功能
    • 可能是问题所在。
    【解决方案2】:

    您可以使用forEach 方法:

    var arr = [
        { key: 'foo', val: 'bar' },
        { key: 'hello', val: 'world' }
    ];
    
    var obj = {};
    arr.forEach(function(item){
      obj[item.key] = item.val;
    });
    
    console.log(obj);

    【讨论】:

      【解决方案3】:

      您可以使用Array.prototype.reduce:

      arr.reduce(function(map, obj) {
          map[obj.key] = obj.val;
          return map;
      }, {});
      

      【讨论】:

        猜你喜欢
        • 2019-04-03
        • 2019-11-07
        • 2013-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多