【问题标题】:New array from array with a condition …来自具有条件的数组的新数组...
【发布时间】:2020-11-02 10:51:10
【问题描述】:

我要变身:

a = [0.25, 0.375, 0.5, 0.5, 0.5]

进入:


a2 = [
       [0.25, 0.375],
       [0.5, 0.5],
       [0.5]
     ]

–其中每行数组项的总和

我想一些切片,减少治疗可以完成这项工作,但我只是不知道在哪里插入条件......有什么帮助吗?

【问题讨论】:

  • 到目前为止你尝试过什么?一个简单的for 循环就可以完成这项工作。
  • 创建了一个包含范围索引的数组,然后逐步完成这些......这似乎过于复杂,然后我转向减少但如果 (acc>0) 不起作用......

标签: javascript arrays dictionary slice reduce


【解决方案1】:

您可以使用约束函数来减少数组。

const
    add = (a, b) => a + b,
    constraint = sum => sum <= 1,
    array = [0.25, 0.375, 0.5, 0.5, 0.5],
    result = array.reduce((r, v) => {
        let last =  r[r.length - 1];
        if (!last || !constraint(last.reduce(add) + v)) r.push(last = []);
        last.push(v);
        return r;
    }, []);

console.log(result);

【讨论】:

    【解决方案2】:
    var s = 0;
    var start = 0;
    var a2 = [];
    for (var i = 0; i<a.length; i++) {
       if (s+a[i] <= 1) {
           s+=a[i];
       }
       else {
          if (i == start) {
             a2.push(a.slice(i,i);
          }
          else {
             a2.push(a.slice(start, i-1);
          }
          s = a[i]
          start = i;
       }
    }
    

    【讨论】:

      【解决方案3】:

      const a = [0.25, 0.375, 0.5, 0.5, 0.5];
      
      const result = a.reduce(
          (acc, val) => {
              const last = acc[acc.length - 1];
      
              if (last.reduce((a, v) => a + v, 0) + val <= 1) {
                  last.push(val);
              } else {
                  acc.push([val]);
              }
      
              return acc;
          },
          [[]],
      );
      
      console.log(result);

      【讨论】:

        猜你喜欢
        • 2014-01-24
        • 2013-07-26
        • 1970-01-01
        • 2022-11-10
        • 1970-01-01
        • 2018-07-28
        • 1970-01-01
        • 1970-01-01
        • 2021-05-09
        相关资源
        最近更新 更多