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

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

映射兩個數組以查看一個屬性是否匹配,然后將特定信息推送到第一個數組中

映射兩個數組以查看一個屬性是否匹配,然后將特定信息推送到第一個數組中

慕容3067478 2021-11-18 16:26:42
javascript 新手,正在努力學習!我試圖映射兩個對象數組,如果某個屬性匹配,則將特定信息拉入第一個數組。let result;let arrNames = [{  id: 10    name: "A"}, {  id: 11,  name: "B"}, {  id: 12,  name: "C"}, }, {  id: 13,  name: "A"}, {  id: 14,  name: "B"}]let arrInfo = [{  name: "A",  info: "AAA"}, {  name: "B",  info: "BBB"}, {  name: "C",  info: "CCC"}]如果 arrNames.name == arrInfo.name,我想將信息推送到名稱數組中。想要的結果:let arrNames = [{  id: 10    name: "A",  info: "AAA"}, {  id: 11,  name: "B",  info: "BBB"}, {  id: 12,  name: "C",  info: "CCC"}, }, {  id: 13,  name: "A",  info: "AAA"}, {  id: 14,  name: "B",  info: "BBB"}]我試過的:const res = arrInfo.map((el, index) => {      if(el.name == arrNames[index].name)         arrNames.push(el.info)    }^ 這顯然行不通——但我想知道在這里擴展或推送是否合適。在此先感謝您的幫助(抱歉這可能是個騙局)。
查看完整描述

2 回答

?
qq_花開花謝_0

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

轉換arrInfo為Map,以name為鍵?,F在映射 arrNames并添加您從arrInfoMap使用name. 使用對象展開來組合兩個對象:


const arrNames = [{"id":10,"name":"A"},{"id":11,"name":"B"},{"id":12,"name":"C"},{"id":13,"name":"A"},{"id":14,"name":"B"}]


const arrInfo = [{"name":"A","info":"AAA"},{"name":"B","info":"BBB"},{"name":"C","info":"CCC"}]


const arrInfoMap = new Map(arrInfo.map(o => [o.name, o]))


const result = arrNames.map(o => ({ ...o, ...arrInfoMap.get(o.name) }))


console.log(result)


查看完整回答
反對 回復 2021-11-18
?
慕斯709654

TA貢獻1840條經驗 獲得超5個贊

你可以這樣做:


let arrNames = [

  {

    id: 10,

    name: 'A'

  },

  {

    id: 11,

    name: 'B'

  },

  {

    id: 12,

    name: 'C'

  },

  {

    id: 13,

    name: 'A'

  },

  {

    id: 14,

    name: 'B'

  }

];


let arrInfo = [

  {

    name: 'A',

    info: 'AAA'

  },

  {

    name: 'B',

    info: 'BBB'

  },

  {

    name: 'C',

    info: 'CCC'

  }

];


// do this

const result = arrNames.map((item) => {

  const newItem = item; // here we define a new object that is the same as your object that is currently looped up to in your arrNames array


  // loop your second array over this currently looped to object, seeing if the name matches

  arrInfo.forEach((item2) => {

    if (item.name === item2.name) {

      newItem.info = item2.info; // if they do set a new property for your new object called info as the info from item 2 of this arrInfo array

    }

  });


  // return this new object whether or not there was a match for the name property

  return newItem; 

});


console.log(result);


所以你的 map 方法的問題是你需要記住在你的回調函數結束時返回一些東西。您只是推送到一個數組,就像使用.mapas a 一樣forEach。Map 將一個數組轉換為另一個相同長度的數組。在這里,您正在嘗試創建一個新數組,其中被循環的數組元素將有一個額外的info屬性,如果它與您的第二個數組arrInfo的名稱相匹配。


因此,您可以做的是在地圖中使用 forEach 來檢查它們是否匹配,如果匹配,則向您的 arrayNames 元素添加一個新屬性,并將其作為新創建的數組的新元素返回。希望有所幫助,如果您需要,請在評論中要求澄清。


查看完整回答
反對 回復 2021-11-18
  • 2 回答
  • 0 關注
  • 194 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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