亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

測試一些基本的JavaScript代碼時出現意外輸出

測試一些基本的JavaScript代碼時出現意外輸出

滄海一幻覺 2021-05-07 18:12:44
我正在學習Javascript中的不同數組函數,并且無法理解我編寫的用于測試array.map()的基本代碼的輸出。let contacts = [{  "firstName": "Jim",  "lastName": "Smith"}, {  "firstName": "Laura",  "lastName": "Bush"}, {  "firstName": "Adam",  "lastName": "Shaw"}];let tempJson = {};const newContacts = contacts.map(contact => {//tempJson = {}tempJson[contact.firstName] = contact.lastNameconsole.log(tempJson);return tempJson;});console.log(newContacts);預期產量//tempJson{ "Jim": "Smith" }{ "Jim": "Smith", "Laura": "Bush" }{ "Jim": "Smith", "Laura": "Bush", "Adam": "Shaw" }//newContacts[ { "Jim": "Smith", },   { "Jim": "Smith", "Laura": "Bush"},   { "Jim": "Smith", "Laura": "Bush", "Adam": "Shaw" } ]實際產量//tempJson{ "Jim": "Smith" }{ "Jim": "Smith", "Laura": "Bush" }{ "Jim": "Smith", "Laura": "Bush", "Adam": "Shaw" }//newContacts[ { "Jim": "Smith", "Laura": "Bush", "Adam": "Shaw" },   { "Jim": "Smith", "Laura": "Bush", "Adam": "Shaw" },   { "Jim": "Smith", "Laura": "Bush", "Adam": "Shaw" } ]新的通訊錄數組不應該只包含map函數返回的對象嗎?我錯過了一些東西,我不確定它是什么。
查看完整描述

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);


查看完整回答
反對 回復 2021-05-27
?
月關寶盒

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);


查看完整回答
反對 回復 2021-05-27
?
幕布斯6054654

TA貢獻1876條經驗 獲得超7個贊

該.map()函數旨在用于獲取數組并將每個元素轉換為新數組的相應元素值??磥砟胍龅氖菑臄到M的元素中構建一個新對象,因此這并不是真正的工作.map()。更通用的.reduce()函數會更好:它允許您在迭代遍歷數組元素時將結果累積為任何類型的值。


在這種情況下,您可以使用.reduce()以下方法:


const newContacts = contacts.reduce(function(result, contact) {

  result[contact.firstName] = contact.lastName;

  return result;

}, {});

這第二個參數{}來.reduce()為初始值。它在每次迭代時作為第一個參數傳遞給回調函數,并且回調函數負責返回更新后的值。


查看完整回答
反對 回復 2021-05-27
  • 3 回答
  • 0 關注
  • 176 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號