3 回答

TA貢獻1797條經驗 獲得超6個贊
您正在返回對的引用,tempJson因此最終結果tempJson將反映在該引用上newContacts,而不是clone您的tempJson,然后返回克隆的Object。
let contacts = [{
"firstName": "Jim",
"lastName": "Smith"
}, {
"firstName": "Laura",
"lastName": "Bush"
}, {
"firstName": "Adam",
"lastName": "Shaw"
}];
let tempJson = {};
const newContacts = contacts.map(contact => {
let clonedObj = {};
tempJson[contact.firstName] = contact.lastName
Object.assign(clonedObj, tempJson);
return clonedObj;
});
console.log(newContacts);
PS:reduce正如其他人所指出的那樣更合適。
let contacts = [{
"firstName": "Jim",
"lastName": "Smith"
}, {
"firstName": "Laura",
"lastName": "Bush"
}, {
"firstName": "Adam",
"lastName": "Shaw"
}];
const output = contacts.reduce((accu, {firstName, lastName}, i) => {
accu.push({...accu[i-1], [firstName]: lastName });
return accu;
}, []);
console.log(output);

TA貢獻1772條經驗 獲得超5個贊
使用reduce來代替:
let contacts = [{
"firstName": "Jim",
"lastName": "Smith"
}, {
"firstName": "Laura",
"lastName": "Bush"
}, {
"firstName": "Adam",
"lastName": "Shaw"
}];
const newContacts = Object.entries(contacts.reduce((acc, { firstName, lastName }) => {
acc[firstName] = lastName;
return acc;
}, {})).map(([k, v]) => ({[k]: v}));
console.log(newContacts);

TA貢獻1876條經驗 獲得超7個贊
該.map()函數旨在用于獲取數組并將每個元素轉換為新數組的相應元素值??磥砟胍龅氖菑臄到M的元素中構建一個新對象,因此這并不是真正的工作.map()。更通用的.reduce()函數會更好:它允許您在迭代遍歷數組元素時將結果累積為任何類型的值。
在這種情況下,您可以使用.reduce()以下方法:
const newContacts = contacts.reduce(function(result, contact) {
result[contact.firstName] = contact.lastName;
return result;
}, {});
這第二個參數{}來.reduce()為初始值。它在每次迭代時作為第一個參數傳遞給回調函數,并且回調函數負責返回更新后的值。
添加回答
舉報