为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

一只甜甜圈 2023-05-11 10:05:21
我有这个数组[ 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);有什么建议么?
查看完整描述

3 回答

?
哈士奇WWW

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);



查看完整回答
反对 回复 2023-05-11
?
慕后森

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);


查看完整回答
反对 回复 2023-05-11
?
汪汪一只猫

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);


查看完整回答
反对 回复 2023-05-11
  • 3 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信