Javascript:如果总和在遍历数组时满足条件,则拆分数组的最佳方法

我有这个数组


[ 1, -1, -1, -1, 1, -1, 1, 1 ]

我正在尝试找出获得我需要做的事情的最佳方法。我想弄清楚我是否需要使用 reduce 方法、do..while 循环或其他方法。


首先,我需要遍历数组。其次,我需要在遍历数组时进行总结。如果总和是0然后将加起来的元素推入0新数组。


例如,如果数组中的前两个元素[1, -1]相加为0,则将 [1, -1] 推入新数组以获得此结果:


[[1, -1], [-1, -1, 1, -1, 1, 1]]

因此,我认为也许该reduce方法是这项工作的最佳人选。这是我的尝试:


let hikeArr = [ 1, -1, -1, -1, 1, -1, 1, 1 ];


let newArr = hikeArr.reduce((a, b) => {

        let sum = a + b;

        if( sum == 0) {

            a.push(b)

        }

        return a;

    }, []);

    console.log("newArr", newArr);

有什么建议么?


一只甜甜圈
浏览 135回答 3
3回答

哈士奇WWW

我认为效果不会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);

慕后森

这可以简单地使用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);

汪汪一只猫

您需要一个临时数组,最好带有一个闭包以及一个使用 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);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript