如何将;“最近的”;使用javascript的数组中的数字

如何将;“最近的”;使用javascript的数组中的数字,javascript,arrays,Javascript,Arrays,我有一个按升序排序的数字数组。如何对“最近”的数字进行分组(例如,数字之间的差值小于5)? 所以在[1,4,5,23,40,55,56,100,234]中,我想要 [[1,4,5],23,40,[55,56],100,234]使用空数组作为初始值的方法,其中通过检查最后一个元素来更新数组 var数据=[1,4,5,23,40,55,56100234]; var res=数据减少(函数(arr,e){ //缓存最后一个元素索引 var i=阵列长度-1; //检查数组是否至少存在一个元素 如果(

我有一个按升序排序的数字数组。如何对“最近”的数字进行分组(例如,数字之间的差值小于5)? 所以在[1,4,5,23,40,55,56,100,234]中,我想要 [[1,4,5],23,40,[55,56],100,234]

使用空数组作为初始值的方法,其中通过检查最后一个元素来更新数组

var数据=[1,4,5,23,40,55,56100234];
var res=数据减少(函数(arr,e){
//缓存最后一个元素索引
var i=阵列长度-1;
//检查数组是否至少存在一个元素
如果(i>-1){
//检查最后一个元素是否为数组
if(Array.isArray(arr[i])){
//比较数组中的最后一个元素和当前元素是否相邻
//如果是,则推入该阵列,否则推入主阵列
e-arr[i][arr[i]。长度-1]<5?arr[i]。推(e):arr.push(e);
//如果最后一个元素不是数组
}否则{
//如果最后一个元素和当前元素相邻
//用数组更新最后一个元素,或者像往常一样推送
e-arr[i]<5?arr[i]=[arr[i],e]:arr.push(e);
}
//如果数组为空
}否则
//只需推动该元素
arr.push(e);
//返回数组引用
返回arr;
//将初始值设置为epty数组
}, [])
控制台日志(res)使用空数组作为初始值的方法,其中通过检查最后一个元素来更新数组

var数据=[1,4,5,23,40,55,56100234];
var res=数据减少(函数(arr,e){
//缓存最后一个元素索引
var i=阵列长度-1;
//检查数组是否至少存在一个元素
如果(i>-1){
//检查最后一个元素是否为数组
if(Array.isArray(arr[i])){
//比较数组中的最后一个元素和当前元素是否相邻
//如果是,则推入该阵列,否则推入主阵列
e-arr[i][arr[i]。长度-1]<5?arr[i]。推(e):arr.push(e);
//如果最后一个元素不是数组
}否则{
//如果最后一个元素和当前元素相邻
//用数组更新最后一个元素,或者像往常一样推送
e-arr[i]<5?arr[i]=[arr[i],e]:arr.push(e);
}
//如果数组为空
}否则
//只需推动该元素
arr.push(e);
//返回数组引用
返回arr;
//将初始值设置为epty数组
}, [])

控制台日志(res)您可以检查前置项,如果在范围内,则添加到数组

var数据=[1,4,5,23,40,55,56100234],
结果=数据.reduce(函数(r、a、i、aa){
if(a-aa[i-1]<5){
if(!Array.isArray(r[r.length-1])){
r[r.length-1]=[r[r.length-1];
}
r[r.length-1]。推送(a);
返回r;
}
r、 推(a);
返回r;
}, []);

console.log(结果);//[[1,4,5],23,40,[55,56],100,234]
您可以检查前置项,如果在范围内,则添加到数组中

var数据=[1,4,5,23,40,55,56100234],
结果=数据.reduce(函数(r、a、i、aa){
if(a-aa[i-1]<5){
if(!Array.isArray(r[r.length-1])){
r[r.length-1]=[r[r.length-1];
}
r[r.length-1]。推送(a);
返回r;
}
r、 推(a);
返回r;
}, []);
console.log(结果);//[1,4,5,23,40,55,56,100,234]
另一个(可能更短的)减少值呢:

另一个(可能更短的)减少:


您可以使用reduce和check last element added来添加到最后一个数组或插入新的数组,当到达数据的最后一个元素时,您可以使用
map
删除带有一个元素的数组

var数据=[1,4,5,23,40,55,56100234];
var结果=数据.reduce(函数(r,e,i){
如果(i!=0){
(e-data[i-1]<5)?r[r.length-1]。推(e):r.push([e])
}否则{
r、 推送([e])
}
如果(i==data.length-1)r=r.map(e=>e.length==1?e[0]:e)
返回r;
}, [])

console.log(result)
您可以使用reduce并检查添加到最后一个数组的最后一个元素或插入新元素,当您到达数据的最后一个元素时,您可以使用
map
删除带有一个元素的数组

var数据=[1,4,5,23,40,55,56100234];
var结果=数据.reduce(函数(r,e,i){
如果(i!=0){
(e-data[i-1]<5)?r[r.length-1]。推(e):r.push([e])
}否则{
r、 推送([e])
}
如果(i==data.length-1)r=r.map(e=>e.length==1?e[0]:e)
返回r;
}, [])

console.log(结果)
这是一个好问题

虽然我的答案有点复杂,但出于实验目的,你也可以这样做

var数据=[1,4,5,23,40,55,56100234],
结果=数据。减少((p,c)=>p.length?p[p.length-1]。长度?c-p[p.length-1][p[p.length-1]。长度-1]<5?(p[p.length-1]。推(c),p)
:(p.push(c),p)
:c-p[p.length-1]<5?(p[p.length-1]=[p[p.length-1],c],p)
:(p.push(c),p)
:c-p<5?[[p].concat(c)]
:[p,c]);

log(JSON.stringify(result))这是一个好问题

虽然我的答案有点复杂,但出于实验目的,你也可以这样做

var数据=[1,4,5,23,40,55,56100234],
结果=数据。减少((p,c)=>p.length?p[p.length-1]。长度?c-p[p.length-1][p[p.length-1]。长度-1]<5?(p[p.length-1]。推(c),p)
:(p.push(c),p)
:c-p[p.leng
 newarray=array.reduce((newarray,number)=>{
   var last=newarray.pop()||[];
      if(last.every(elem=>elem+6>number)){
       last.push(number);
       newarray.push(last);
       return newarray;
      }
       newarray.push(last);
       newarray.push([number]);
       return newarray;
      },[]);