3 回答
TA贡献1799条经验 获得超6个赞
我认为效果不会reduce
太好,因为您需要跟踪 3 个独立的事物:当前总和、组合数组和进行中的数组。(即使只需要跟踪一个对象,IMO 也不太合适for
)改用外部变量和循环:
let hikeArr = [ 1, -1, -1, -1, 1, -1, 1, 1 ];
const output = [];
let sum = 0;
let subarr = [];
for (const num of hikeArr) {
sum += num;
subarr.push(num);
if (sum === 0) {
output.push(subarr);
subarr = [];
}
}
console.log(output);
TA贡献1802条经验 获得超5个赞
这可以简单地使用Array.reduce.
在Array.reduce回调中,对于输入current value,您可以将该值推送到subArr并计算总和。
一旦sum达到0,将其推subArr到main result并将它们格式化为初始值。
let hikeArr = [ 1, -1, -1, -1, 1, -1, 1, 1 ];
let subArr = [];
let sum = 0;
const result = hikeArr.reduce((acc, cur) => {
subArr.push(cur);
sum += cur;
if (sum === 0) {
acc.push(subArr);
subArr = [];
sum = 0;
}
return acc;
}, []);
console.log(result);
TA贡献1898条经验 获得超8个赞
您需要一个临时数组,最好带有一个闭包以及一个使用 reduce 求和的变量。
let array = [1, -1, -1, -1, 1, -1, 1, 1],
result = array.reduce(((temp, sum) => (r, v) => {
temp.push(v);
sum += v;
if (!sum) {
r.push(temp);
temp = [];
}
return r;
})([], 0), []);
console.log(result);
添加回答
举报