如果元素的减法小于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]]
答案 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; }