如何使用键值对将对象数组转换为对象

时间:2017-04-26 05:58:59

标签: javascript arrays object typescript

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

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

如何将其转换为

等对象
{"name1":"value1","name2":"value2",...}

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

8 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:3)

尝试这个简单的逻辑

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

答案 2 :(得分: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);
}, {})

答案 3 :(得分:1)

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)




答案 4 :(得分:1)

TL; DR:

我有一个不同的起始数组:

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

这是我的解决方案:

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

说明

没有其他答案对我有用。如果要将对象数组转换为键-值对对象,例如:

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

但是由于this article by 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}

答案 5 :(得分:1)

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

答案 6 :(得分:-1)

试试这个:

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

答案 7 :(得分:-1)

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




使用ES6方法spreaqd(...) let arr=[{"name1":"value1"},{"name2":"value2"}]; let obj = Object.assign({}, ...arr); console.log(obj);分配



if (isset($_GET['info'])) {
  echo '<script> function showUser(' . $_GET["info"] . ') </script>';
} 
&#13;
&#13;
&#13;

相关问题