Javascript 如何获得数组中所有连续数的范围(增加子序列)?

Javascript 如何获得数组中所有连续数的范围(增加子序列)?,javascript,ruby,Javascript,Ruby,在ruby中,我可以使用chunk\u,同时也可以这样使用: a = [1,2,4,9,10,11,12,15,16,19,20,21] b = a.chunk_while {|i, j| i+1 == j } p b.to_a #=> [[1, 2], [4], [9, 10, 11, 12], [15, 16], [19, 20, 21]] 在JavaScript中执行此操作的最佳方法是什么?您可以使用Array.reduce()创建chunkWhile()函数: constchu

在ruby中,我可以使用
chunk\u,同时
也可以这样使用:

a = [1,2,4,9,10,11,12,15,16,19,20,21]
b = a.chunk_while {|i, j| i+1 == j }
p b.to_a #=> [[1, 2], [4], [9, 10, 11, 12], [15, 16], [19, 20, 21]]

在JavaScript中执行此操作的最佳方法是什么?

您可以使用
Array.reduce()创建
chunkWhile()
函数:

constchunkwhile=(谓词,arr)=>
arr.reduce((r,n)=>{
设last=r[r.长度-1]
if(!last | |!谓词(last[last.length-1],n)){
最后=[]
r、 推(最后)
}
最后。推(n)
返回r
}, [])
常数a=[1,2,4,9,10,11,12,15,16,19,20,21]
const result=chunkWhile((i,j)=>i+1==j,a)

console.log(result)
您可以使用
Array.reduce()创建
chunkWhile()
函数:

constchunkwhile=(谓词,arr)=>
arr.reduce((r,n)=>{
设last=r[r.长度-1]
if(!last | |!谓词(last[last.length-1],n)){
最后=[]
r、 推(最后)
}
最后。推(n)
返回r
}, [])
常数a=[1,2,4,9,10,11,12,15,16,19,20,21]
const result=chunkWhile((i,j)=>i+1==j,a)

console.log(result)
您也可以使用Ruby的:
a.slice_,当{x,y | y!=x+1}.to_a
时。另一种方法,我之所以提到它,是因为它可能适合转换为JavaScript是:
a.each_with_object([]){x,arr | arr.any?&&x==arr.last.last+1?arr.last你也可以使用Ruby的:
a.slice_当{x,y | y!=x+1}to_a
。另一种方法,我之所以提到它,是因为它可能适合翻译成JavaScript是:
a.each_与_对象([]){x,arr&&x==arr.last+1?arr