我有一个数组
[{0:{title:"test1"}},{1:{message1:"message1"}},{2:{message2:"message2"}}]
我想以下面的格式获取一个对象
{title:"test1",message1:"message1",message2:"message2"}
我正在尝试下面的代码,但没有运气
var rv = {};
for (var i = 0; i < messageArray.length; ++i)
if (messageArray[i] !== undefined) rv[i] = messageArray[i];`
结果我
{0: {title:"test1"}, 1: {message1:"message1"},2: {message2:"message2"}}
答案 0 :(得分:2)
您可以使用reduce
汇总数据,并使用Object.assign()
将新属性合并到对象中。
let arr = [{0:{title:"test1"}},{1:{message1:"message1"}},{2:{message2:"message2"}}];
let result = arr.reduce((c, v, i) => Object.assign(c, v[i]),{});
console.log(result);
如果对象上的键不在序列中,您可以使用Object.values()
来获取值。
let arr = [{0:{title:"test1"}},{1:{message1:"message1"}},{2:{message2:"message2"}}];
let result = arr.reduce((c, v, i) => Object.assign(c, Object.values(v)[0]), {});
console.log(result);
答案 1 :(得分:1)
您可以使用.map()
和.reduce()
:
let data = [
{0:{title:"test1"}},
{1:{message1:"message1"}},
{2:{message2:"message2"}}
];
let result = data.map((c, i) => c[i])
.reduce((a, c) => Object.assign(a, c), {});
console.log(result);
&#13;
<强>文档:强>
答案 2 :(得分:1)
您可以将spreading项合并到Object.assign()
。然后通过Object.values()
获取内部值,并通过传播到Object.assign()
:
const data = [{0:{title:"test1"}},{1:{message1:"message1"}},{2:{message2:"message2"}}];
const result = Object.assign(...Object.values(Object.assign({}, ...data)));
console.log(result);
答案 3 :(得分:0)
你应该让阵列变得平坦
const rv = [];
for (var i = 0; i < messageArray.length; ++i) {
if (messageArray[i] !== undefined)
rv.push(messageArray[i]);
}
然后可以使用Array.reduce
,它应该看起来像
rv.reduce((result, element) => {
Object.keys(element).forEach((key) => {
result[key] = element[key];
});
return result;
}, {});
答案 4 :(得分:0)
您可以迭代每个属性,并使用Object.assign扩展每个属性的当前对象。
var object = {};
var input = [{0:{title:"test1"}},{1:{message1:"message1"}},{2:{message2:"message2"}}];
for (var i = 0; i < input.length; i++) {
object = Object.assign(input[i][i], object);
}
console.log(object);
/*
{
"message2": "message2",
"message1": "message1",
"title": "test1"
}
*/
&#13;
答案 5 :(得分:0)
以下代码应该提供所需的结果没有Object.assign :
//Using map() and reduce()
var arr = [{0:{title:"test1"}},{1:{message1:"message1"}},{2:{message2:"message2"}}];
var result = arr.map(function(item,i){
return item[i];
})
.reduce(function(acc,item){
return {...acc,...item}
},{})
console.log(result); // {title: "test1", message1: "message1", message2: "message2"}
希望这有帮助!