我想构建一个
- 采用一个数字数组作为输入
- 计算输入数组中数字的运行和
- 返回一个新数组,该数组包含正在运行的和
例如,如果我用[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
- 空合并运算符(??)
- 逗号运算符(,)