在Javascript中运行输入数组的总和



我想构建一个

  1. 采用一个数字数组作为输入
  2. 计算输入数组中数字的运行和
  3. 返回一个新数组,该数组包含正在运行的和

例如,如果我用[1,2,4]的输入调用这个函数,输出应为[1,3,6,10]。但是,当我运行代码时,它会返回一个空数组。

以下是我到目前为止得到的代码。

function sumOfArray(nums) {
var output = [];        // tip: initialize like let output = [nums?.[0] ?? 0];
for(let i = 1 ; i < nums.length ; i++) {
nums[i] = nums[i] + nums[i-1];
output.push(nums[i]);
}
return output;
};
console.log(
'calling sumOfArray([1,2,3,4])',
sumOfArray([1,2,3,4])
);

只需在数组初始化中添加第一项,一切都会正常进行。

function sumOfArray(nums) {
var output = [nums[0]];        // tip: initialize like let output = [nums?.[0] ?? 0];
for(let i = 1 ; i < nums.length ; i++) {
nums[i] = nums[i] + nums[i-1];
output.push(nums[i]);
}
return output;
};
console.log(
'calling sumOfArray([1,2,3,4])',
sumOfArray([1,2,3,4])
);

const input =  [1,2,3,4]
const theFunctionYouWannaWrite = (acc, v) => {
acc.push(v + (acc[acc.length - 1] || 0))
return acc;
}
const output = input.reduce(theFunctionYouWannaWrite, [])
console.log(output)

如果您想将其与for一起使用

const input =  [1,2,3,4]
const theFunctionYouWannaWrite = (acc, v) => {
acc.push(v + (acc[acc.length - 1] || 0))
return acc;
}
function sumOfArray(nums) {
var output = [];
for(let i = 0 ; i < nums.length ; i++) {
theFunctionYouWannaWrite(output, nums[i])
}
return output;
};
console.log(sumOfArray(input))

let 
sum = 0,
nums = [1, 2, 3, 4],
res = [];
nums.forEach((item, index, arr) => {
sum += arr[index];
res.push(sum);
});
console.log(res);

您可以使用Array.prototype.reduce.

function sumOfArray(nums) {
return nums.reduce((s, n) => (s.push((s.at(-1) ?? 0) + n), s), []);
}
console.log(sumOfArray([1, 2, 3, 4]));

解决方案的问题是,您需要从索引0开始循环,并使用??||检查第i-1个索引是否有效。

function sumOfArray(nums) {
const output = [];
for (let i = 0; i < nums.length; i++) {
nums[i] = nums[i] + (nums[i - 1] ?? 0);
output.push(nums[i]);
}
return output;
}
console.log(sumOfArray([1, 2, 3, 4]));

其他相关文件:

  • 阵列原型.at
  • 空合并运算符(??)
  • 逗号运算符(,)

最新更新