【问题标题】:How to convert an array of objects to object with key value pairs如何将对象数组转换为具有键值对的对象
【发布时间】:2017-09-23 09:10:03
【问题描述】:

我想在 javascript 中使用键值对将对象数组转换为对象。

var arr=[{"name1":"value1"},{"name2":"value2"},...}];

如何将其转换为对象,例如

{"name1":"value1","name2":"value2",...}

我希望大多数浏览器都支持它。

【问题讨论】:

    标签: javascript arrays object typescript


    【解决方案1】:

    试试这个简单的逻辑

    var arr=[{"name1":"value1"},{"name2":"value2"}];
    var obj = {}; //create the empty output object
    arr.forEach( function(item){ 
       var key = Object.keys(item)[0]; //take the first key from every object in the array
       obj[ key ] = item [ key ];  //assign the key and value to output obj
    });
    console.log( obj );

    【讨论】:

    • 对于短数组和 ES5 环境,这似乎是最易读/最简单的方式
    【解决方案2】:

    您可以对数组运行 reduce 并返回一个新对象。但重要的是要记住,如果属性相同,它们将被覆盖。

    const newObject = array.reduce((current, next) => {
      return { ...current, ...next};
    }, {})
    

    如果你使用的是 es5 而不是 es6:

    var newObject = array.reduce(function(current, next){
      return Object.assign({}, current, next);
    }, {})
    

    【讨论】:

    • 这是非常低效的(二次方时间,大量中间对象),可以通过使用Object.assign(current, next)而不是Object.assign({}, current, next)来解决。
    【解决方案3】:

    Array#forEachObject.keys 一起使用

    var arr = [{"name1": "value1"},{"name2": "value2"}];
    var obj = {};
    arr.map(k => Object.keys(k).forEach(a => obj[a] = k[a]))
    console.log(obj)

    【讨论】:

    • 一个map方法返回一个新数组,但是这个函数只是用来改变var obj,所以forEach更合适。
    • Object.keys(k).forEach(a => obj[a] = k[a])Object.assign(obj, k) 的较慢、可读性较差且兼容性较差的版本。
    【解决方案4】:

    您可以使用Object.assignspread syntax ... 来创建具有给定对象数组的单个对象。

    var array = [{ name1: "value1" }, { name2: "value2" }],
        object = Object.assign({}, ...array);
        
    console.log(object);

    【讨论】:

      【解决方案5】:

      使用for...in循环

      var arr=[{"name1":"value1"},{"name2":"value2"}];
      
      var obj = {};
      for (var i in arr) {
        obj[Object.keys(arr[i])] = arr[i][Object.keys(arr[i])];
      }
      
      console.log(obj);

      Array.map() 方法与ES6 一起使用

      var arr=[{"name1":"value1"},{"name2":"value2"}];
      
      var obj = {};
      
      arr.map(item => obj[Object.keys(item)] = item[Object.keys(item)]);
      
      console.log(obj);

      使用Object.assign() 方法和ES6 spreaqd(...) 赋值

      let arr=[{"name1":"value1"},{"name2":"value2"}];
      
      let obj = Object.assign({}, ...arr);
      
      console.log(obj);

      【讨论】:

        【解决方案6】:

        使用现代 JS (YMMV):

        1. 将每个对象拆分为条目
        2. 将所有条目聚合到一个对象中

        const arr = [{name1:"value1"},{name2:"value2"},{a:1,b:2}];
        const obj = Object.fromEntries(arr.flatMap(Object.entries));
        console.log(obj);

        【讨论】:

          猜你喜欢
          • 2018-08-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多