簡體   English   中英

如何在不使用Object.assign的情況下使用javascript將數組轉換為Object

[英]How to Convert an array into Object using javascript without using Object.assign

我有一個數組

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

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

您可以使用.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); 

文件:

您可以通過擴展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); 

您應該將陣列弄平

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;
}, {});

您可以遍歷每個屬性,並使用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" } */ 

以下代碼應在沒有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"}

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM