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

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

如何在 Javascript 中對任意數量的不同長度的數組的元素求和?

如何在 Javascript 中對任意數量的不同長度的數組的元素求和?

慕俠2389804 2023-07-14 09:43:46
雖然下面的代碼將滿足添加兩個不同長度的數組,但我如何修改它以接受任意數量的數組作為參數,例如 ([1, 2, 3], [4, 5], [6 ]) 將返回 [11, 7, 3] 數組?const addTogether = (arr1, arr2) => {  let result = [];  for (let i = 0; i < Math.max(arr1.length, arr2.length); i++) {    result.push((arr1[i] || 0) + (arr2[i] || 0))  }  return result}
查看完整描述

5 回答

?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

使用嵌套數組,并循環數組而不是硬編碼兩個數組變量。


您可以使用arrays.map()來獲取所有長度,以便計算最大長度。并對arrays.reduce()每個數組中的一個元素求和。


const addTogether = (...arrays) => {

  let result = [];

  let len = Math.max(...arrays.map(a => a.length));

  for (let i = 0; i < len; i++) {

    result.push(arrays.reduce((sum, arr) => sum + (arr[i] || 0), 0));

  }

  return result

}


console.log(addTogether([1, 2, 3], [4, 5], [6]));


查看完整回答
反對 回復 2023-07-14
?
弒天下

TA貢獻1818條經驗 獲得超8個贊

解決方案:


const addTogether = (...args) => {

let result = [];

let max = 0;

args.forEach((arg)=>{

    max = Math.max(max,arg.length)

})

for(let j=0;j<max;j++){

result[j]= 0

for (let i = 0; i < args.length; i++) {

   if(args[i][j])

     result[j]+= args[i][j]

     }

  }

  return result

 }

 console.log(addTogether([1, 2, 3], [4, 5], [6]))


查看完整回答
反對 回復 2023-07-14
?
富國滬深

TA貢獻1790條經驗 獲得超9個贊

您可以在函數內部使用參數對象。

arguments是一個可在函數內部訪問的類數組對象,其中包含傳遞給該函數的參數值。

const addTogether = function () {

? const inputs = [...arguments];

? const maxLen = Math.max(...inputs.map((item) => item.length));

? const result = [];

? for (let i = 0; i < maxLen; i ++) {

? ? result.push(inputs.reduce((acc, cur) => acc + (cur[i] || 0), 0));

? }

? return result;

};


console.log(addTogether([1,2,3], [4,5], [6]));


查看完整回答
反對 回復 2023-07-14
?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

用于rest param syntax接受任意數量的參數。按外部數組的長度降序對外部數組進行排序。通過使用解構賦值將內部數組的第一個和其余部分分開。最后使用Array.prototype.map()遍歷第一個數組,因為它是最大的數組,并使用Array.prototype.reduce()方法來獲取總和。


const addTogether = (...ar) => {

  ar.sort((x, y) => y.length - x.length);

  const [first, ...br] = ar;

  return first.map(

    (x, i) => x + br.reduce((p, c) => (i < c.length ? c[i] + p : p), 0)

  );

};


console.log(addTogether([1, 2, 3], [4, 5], [6]));


查看完整回答
反對 回復 2023-07-14
?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

不要使用for要求您知道每個數組長度的循環,而是嘗試使用不需要的東西。例如 -while循環。

使用虛擬變量遞增并為每個數組重置它,并將循環終止條件設置為 - arr[i] === null


查看完整回答
反對 回復 2023-07-14
  • 5 回答
  • 0 關注
  • 231 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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