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]));
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]))
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]));
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]));
TA贡献1802条经验 获得超4个赞
不要使用for
要求您知道每个数组长度的循环,而是尝试使用不需要的东西。例如 -while
循环。
使用虚拟变量递增并为每个数组重置它,并将循环终止条件设置为 - arr[i] === null
。
添加回答
举报