有人可以建议一些更好的方式来编写此Javascript代码

时间:2019-01-10 07:23:29

标签: javascript arrays

我得到一个输入数组需要转换为输出数组(它是输出数组中的连续数组)。

var input = [1, 3, 4, 5, 8, 9, 15, 20, 21, 22, 23, 24, 25, 26, 40];
var output = [[1], [3, 4, 5], [8, 9], [15], [20, 21, 22, 23, 24, 25, 26], [40]];

我能够通过以下方式实现这一目标

let t = 0;
let tArr = []
const a = [];
input.map(i => {
  if (i-t === 1) {  
    tArr.push(i);
  } else {
    a.push(tArr);
    tArr = [];
    tArr.push(i)
  }
  t = i;
});
a.push(tArr);
console.log("final", a)

有人可以建议使用更干净的代码,或者是否可以对其进行优化。

1 个答案:

答案 0 :(得分:3)

您可以通过查看索引或将前一个值与实际值进行比较来缩小数组。

var input = [1, 3, 4, 5, 8, 9, 15, 20, 21, 22, 23, 24, 25, 26, 40],
    result = input.reduce((r, v, i, a) => {
        if (!i || a[i - 1] + 1 < v) {
            r.push([v]);
        } else {
            r[r.length - 1].push(v);
        }
        return r;
    }, []);

console.log(result);