为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 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 关注
  • 174 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信