如何在 Javascript 中对任意数量的不同长度的数组的元素求和?

虽然下面的代码将满足添加两个不同长度的数组,但我如何修改它以接受任意数量的数组作为参数,例如 ([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

}


慕侠2389804
浏览 175回答 5
5回答

眼眸繁星

使用嵌套数组,并循环数组而不是硬编码两个数组变量。您可以使用arrays.map()来获取所有长度,以便计算最大长度。并对arrays.reduce()每个数组中的一个元素求和。const addTogether = (...arrays) => {&nbsp; let result = [];&nbsp; let len = Math.max(...arrays.map(a => a.length));&nbsp; for (let i = 0; i < len; i++) {&nbsp; &nbsp; result.push(arrays.reduce((sum, arr) => sum + (arr[i] || 0), 0));&nbsp; }&nbsp; return result}console.log(addTogether([1, 2, 3], [4, 5], [6]));

弑天下

解决方案:const addTogether = (...args) => {let result = [];let max = 0;args.forEach((arg)=>{&nbsp; &nbsp; max = Math.max(max,arg.length)})for(let j=0;j<max;j++){result[j]= 0for (let i = 0; i < args.length; i++) {&nbsp; &nbsp;if(args[i][j])&nbsp; &nbsp; &nbsp;result[j]+= args[i][j]&nbsp; &nbsp; &nbsp;}&nbsp; }&nbsp; return result&nbsp;}&nbsp;console.log(addTogether([1, 2, 3], [4, 5], [6]))

富国沪深

您可以在函数内部使用参数对象。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]));

繁花不似锦

用于rest param syntax接受任意数量的参数。按外部数组的长度降序对外部数组进行排序。通过使用解构赋值将内部数组的第一个和其余部分分开。最后使用Array.prototype.map()遍历第一个数组,因为它是最大的数组,并使用Array.prototype.reduce()方法来获取总和。const addTogether = (...ar) => {&nbsp; ar.sort((x, y) => y.length - x.length);&nbsp; const [first, ...br] = ar;&nbsp; return first.map(&nbsp; &nbsp; (x, i) => x + br.reduce((p, c) => (i < c.length ? c[i] + p : p), 0)&nbsp; );};console.log(addTogether([1, 2, 3], [4, 5], [6]));

慕虎7371278

不要使用for要求您知道每个数组长度的循环,而是尝试使用不需要的东西。例如 -while循环。使用虚拟变量递增并为每个数组重置它,并将循环终止条件设置为 -&nbsp;arr[i] === null。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript