简体   繁体   English

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

[英]How to convert an array of objects to object with key value pairs

I want to convert an array of objects to object with key value pairs in javascript.我想在 javascript 中将对象数组转换为具有键值对的对象。

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

How can i convert it to an object such as如何将其转换为对象,例如

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

I want it to be supported in majority of browsers.我希望大多数浏览器都支持它。

You could use Object.assign and a spread syntax ... for creating a single object with the given array with objects.您可以使用Object.assign扩展语法...来创建具有给定数组和对象的单个对象。

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

You could run a reduce over the array and return a new object.您可以对数组运行 reduce 并返回一个新对象。 But it is important to remember that if properties are the same they will be overwritten.但重要的是要记住,如果属性相同,它们将被覆盖。

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

If you are using es5 and not es6:如果您使用的是 es5 而不是 es6:

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

With modern JS (YMMV):使用现代 JS(YMMV):

  1. Split each object into entries将每个对象拆分为条目
  2. Aggregate all entries into one object将所有条目聚合到一个对象中

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

Try this simple logic试试这个简单的逻辑

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

use with Array#forEach and Object.keysArray#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)

TL;DR:特尔;博士:

I had a different starting array:我有一个不同的起始数组:

let arr = [{key:"name1",value:"value1"},{key:"name2",value:"value2"}]

This was my solution:这是我的解决方案:

let kvp = Object.assign({}, ...arr.map(item => ({[item.key]:item.value})))
console.log(kvp) // {"name1":"value1","name2":"value2"}

Explanation解释

None of the other answers worked for me.其他答案都不适合我。 If you want to convert an array of objects into an object of key-value pair, like so:如果要将对象数组转换为键值对对象,如下所示:

[{ key:"url", value:"new" },{ key:"page", value:1 }]  // before
{ url:"new", page:1 }  // after

But I figured out an elegant one-liner thanks to this article by Chris Burgen :但是由于Chris Burgen 的这篇文章,我想出了一个优雅的单线

let array = [{ key:"url", value:"new" },{ key:"page", value:1 }]
let kvp = Object.assign({}, ...array.map(item => ({[item.key]:item.value})))
console.log(kvp) // {url: "new", page: 1}

Try this:试试这个:

var arr=[{"name1":"value1"},{"name2":"value2"}];
 var new_arr=[];
 $.each(arr,function(index){
   $.each(arr[index],function(key,value){
    var nw_obj={};
    nw_obj[key]=value;
    new_arr.push(nw_obj);
   });
 });
console.log(JSON.stringify(new_arr));

Using for...in loop :使用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);

Using Array.map() method with ES6 :ES6中使用Array.map()方法

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

Using Object.assign() method with ES6 spreaqd(...) assignment :Object.assign()方法与ES6 spreaqd(...)赋值一起使用

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM