[英]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.