在Javascript中对数组元素进行分组

时间:2018-02-08 09:23:25

标签: javascript arrays node.js group-by

如果元素的减法小于2,我如何对以下数组进行分组?

var myarr = [1.7, 2, 1.4, 6, 7, 14, 15, 21,31,33.2,33.5]

我希望得到这个结果:

 var myarr = [[1.7, 2, 1.4], [6, 7], [14, 15], [21],[31,33.2,33.5]]

2 个答案:

答案 0 :(得分:2)

Reduce数组,如果当前和前一个数字之间的差值大于或等于2(或者它是第一个数字),则向累加器添加一个新的子数组。将当前号码推送到最后一个数组:

var myarr = [1.7, 2, 1.4, 6, 7, 14, 15, 21,31,33.2,33.5]

var result = myarr.reduce(function(r, n, i, arr) {
  if(i === 0 || Math.abs(n - arr[i - 1]) >= 2) r.push([])
  
  r[r.length - 1].push(n)

  return r
}, []);

console.log(result)

答案 1 :(得分:1)

我建议使用差异的绝对值来检查想要的delta,以便在结果集中插入一个新数组,因为值的顺序不是严格提升的。



var array = [1.7, 2, 1.4, 6, 7, 14, 15, 21, 31, 33.2, 33.5],
    delta = 2,
    grouped = array.reduce(function (r, v, i, a) {
        if (!i || Math.abs(a[i - 1] - v) > delta) {
            r.push([]);
        }
        r[r.length -1].push(v);
        return r;
    }, []);

console.log(grouped);

.as-console-wrapper { max-height: 100% !important; top: 0; }