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);
添加回答
舉報