3 回答

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超6個(gè)贊
我認(rèn)為效果不會(huì)reduce
太好,因?yàn)槟枰?3 個(gè)獨(dú)立的事物:當(dāng)前總和、組合數(shù)組和進(jìn)行中的數(shù)組。(即使只需要跟蹤一個(gè)對(duì)象,IMO 也不太合適for
)改用外部變量和循環(huán):
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貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
這可以簡(jiǎn)單地使用Array.reduce.
在Array.reduce回調(diào)中,對(duì)于輸入current value,您可以將該值推送到subArr并計(jì)算總和。
一旦sum達(dá)到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貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊
您需要一個(gè)臨時(shí)數(shù)組,最好帶有一個(gè)閉包以及一個(gè)使用 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);
添加回答
舉報(bào)