簡體   English   中英

如何在一個特定對象中轉換對象數組?

[英]How to convert array of objects in one specific object?

所以,在我上次的采訪中,我有一個非常小的但很難完成的任務。 我只是想知道如何解決它。 我認為我們需要在這個任務中實現遞歸,但我不清楚它。

任務:

let arr = [{name: 'width', value: 300}, {name: 'height', value: 100}];

在輸出時我們必須:

let obj = {width:300, height: 100};

數組對象的數量可以是無窮大。

PS如果您向我提供有關如何完成此任務的知識鏈接,我將感到高興。

謝謝。

使用函數reduce的替代方案

簡要說明

  • 函數Array.prototype.reduce循環一個數組,為每個對象應用一個處理程序。
  • 累加器a將包含每次迭代的結果。
  • 功能converter接收累加器和當前對象。
  • Object.assign(a, {[name]: value})將新屬性分配給當前累加器。
  • 計算屬性名稱 {[name]: value}該代碼將構建一個對象,如下所示:
{ width: 300 }

 let arr = [{name: 'width', value: 300},{name: 'height', value: 100}], converter = (a, {name, value}) => (Object.assign(a, {[name]: value})), obj = arr.reduce(converter, {}); console.log(obj); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 
 <script src="https://codepen.io/synthet1c/pen/KyQQmL.js"></script> 

數組.reduce方法非常適合。 從空對象開始,對於每個數組項,使用該鍵和值向對象添加條目。 例:

 let arr = [{name: 'width', value: 300}, {name: 'height', value: 100}]; let result = arr.reduce((combo, item) => { combo[item.name] = item.value; return combo; }, {}); console.log(result); 

首先,你在數組中的兩個對象之間缺少一個逗號:)

無論何時您想要處理數組並提出單個值,您都希望使用array.reduce 您可以選擇方向(reduce或reduceRight)和累加器函數,以生成所需的值(或對象)。

使用reduce,destructurization和object spread操作符的另一種方法:

 const src = [{ name: 'width', value: 300 }, { name: 'height', value: 100 }] const reducer = (acc, { name, value }) => ({ ...acc, ...{ [name]: value } }); const out = src.reduce(reducer, {}); console.log(out); 

您可以通過在括號表示法的幫助下添加數組中的鍵值對來創建對象:

 let arr = [{name: 'width', value: 300},{name: 'height', value: 100}]; let obj = {}; arr.forEach(pair => obj[pair.name] = pair.value) console.log(obj); 

var len = arr.length, 

var newA = []; 
let width, height, item; 
for(var x = 0; x < len; x+=2){ //add 2 for pair loop because width/height in diff array objects 
 item.width = arr[x].value;
 item.height = arr[x+1].value; 
 newA.push(item); 
 // newA = [{width:value, height:value}, {width:value, height:value}];
}
console.log(newA);

這應該適用於在最終數組中將寬度和高度分組在一起:)

如果你只想要一個大對象(確保沒有名稱重復!)......

var len = arr.length, 
obj = {}; 
for(var x = 0; x < len; x++){ 
 obj[arr[x].name] = arr[x].value;
} 
console.log(obj);

您也可以使用forEach()來解決它。

let arr = [{name: 'width', value: 300},{name: 'height', value: 100}];
let obj = {};
arr.forEach(val=>obj[val.name]=val.value);

您可以使用Array.map(){ [name]: value }的形式創建對象數組,並通過傳播Object.assign()將它們合並到單個對象:

 const arr = [{name: 'width', value: 300}, {name: 'height', value: 100}]; const object = Object.assign(...arr.map(({ name, value }) => ({ [name]: value }))); console.log(object); 

你可以用for循環來解決這個問題:

var obj = {};
for (var i=0; i<arr.length; i++){
    obj[arr[i].name] = arr[i].value;
}

暫無
暫無

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

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