如何使用javascript将数组转换为Object而不使用Object.assign

时间:2018-04-23 15:38:31

标签: javascript arrays

我有一个数组

[{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"}}

6 个答案:

答案 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()

&#13;
&#13;
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;
&#13;
&#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扩展每个属性的当前对象。

&#13;
&#13;
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;
&#13;
&#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"}

希望这有帮助!