【发布时间】:2017-09-23 09:10:03
【问题描述】:
我想在 javascript 中使用键值对将对象数组转换为对象。
var arr=[{"name1":"value1"},{"name2":"value2"},...}];
如何将其转换为对象,例如
{"name1":"value1","name2":"value2",...}
我希望大多数浏览器都支持它。
【问题讨论】:
标签: javascript arrays object typescript
我想在 javascript 中使用键值对将对象数组转换为对象。
var arr=[{"name1":"value1"},{"name2":"value2"},...}];
如何将其转换为对象,例如
{"name1":"value1","name2":"value2",...}
我希望大多数浏览器都支持它。
【问题讨论】:
标签: javascript arrays object typescript
试试这个简单的逻辑
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 );
【讨论】:
您可以对数组运行 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)来解决。
与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)
【讨论】:
var obj,所以forEach更合适。
Object.keys(k).forEach(a => obj[a] = k[a]) 是Object.assign(obj, k) 的较慢、可读性较差且兼容性较差的版本。
您可以使用Object.assign 和spread syntax ... 来创建具有给定对象数组的单个对象。
var array = [{ name1: "value1" }, { name2: "value2" }],
object = Object.assign({}, ...array);
console.log(object);
【讨论】:
使用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);
【讨论】:
使用现代 JS (YMMV):
const arr = [{name1:"value1"},{name2:"value2"},{a:1,b:2}];
const obj = Object.fromEntries(arr.flatMap(Object.entries));
console.log(obj);
【讨论】: