function transformEmployeeData(employeeData) {
var arr = [];
var obj = {};
for (var i = 0; i < employeeData.length; i ) {
var personArr = employeeData[i];
for (var j = 0; j < personArr.length; j ) {
var key = personArr[j][0];
var value = personArr[j][1];
obj[key] = value;
}
arr.push(obj);
}
return arr;
}
input = [
[
['firstName', 'Joe'],
['lastName', 'Blow'],
['age', 42],
['role', 'clerk']
],
[
['firstName', 'Mary'],
['lastName', 'Jenkins'],
['age', 36],
['role', 'manager']
]
];
var getData = transformEmployeeData(input);
console.log(getData);
我希望我的結果是這樣的:
[
{firstName: 'Joe', lastName: 'Blow', age: 42, role: 'clerk'},
{firstName: 'Mary', lastName: 'Jenkins', age: 36, role: 'manager'}
]
所以我var obj = {};進入了第一個 for 回圈,得到了正確的結果。但我仍然無法弄清楚為什么我必須將它移動到回圈內?有什么區別?請幫忙,謝謝!
uj5u.com熱心網友回復:
如果您不將其放入回圈中,那么您將定義一個物件,并且只是在回圈主體中修改其內容并將該單個物件推入陣列中。
但是,如果將它包含在回圈中,則每次回圈體執行時都會創建一個新物件(并且現有變數停止指向前一個物件并現在參考新物件),然后將該新物件推入陣列中,結果在輸出中的多個物件中。
uj5u.com熱心網友回復:
如果您不在第一個回圈中添加物件,則您正在為整個函式執行創建一個物件,該物件可以通過第二個回圈覆寫第一個回圈的先前屬性
uj5u.com熱心網友回復:
你可以使用mapandObject.fromEntries為此
function transformEmployeeData(employeeData) {
return employeeData.map(Object.fromEntries)
}
input = [
[
['firstName', 'Joe'],
['lastName', 'Blow'],
['age', 42],
['role', 'clerk']
],
[
['firstName', 'Mary'],
['lastName', 'Jenkins'],
['age', 36],
['role', 'manager']
]
];
var getData = transformEmployeeData(input);
console.log(getData);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/482197.html
標籤:javascript 数组 循环
上一篇:如何讓打字機回圈?[復制]
