如何将对象数组转换为具有键值对的对象

IT技术 javascript arrays object typescript
2021-02-02 14:46:04

我想在javascript中将对象数组转换为具有键值对的对象。

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

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

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

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

6个回答

您可以使用Object.assign传播语法...来使用给定的对象数组创建单个对象。

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

试试这个简单的逻辑

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 环境,这似乎是最易读/最简单的方式
2021-03-30 14:46:04

您可以对数组运行 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).
2021-03-12 14:46:04

Array#forEach和一起使用Object.keys

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

Object.keys(k).forEach(a => obj[a] = k[a])是较慢、可读性较差且兼容性较差的Object.assign(obj, k).
2021-03-18 14:46:04
map 方法返回一个新数组,但是此函数仅用于变异,var obj因此 aforEach更合适。
2021-04-10 14:46:04

使用现代 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);