Как получить диапазон всех непрерывных чисел в массиве (возрастающая подпоследовательность)? - PullRequest
0 голосов
/ 08 января 2020

В ruby Я могу использовать chunk_while как таковой:

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?

1 Ответ

2 голосов
/ 08 января 2020

Вы можете создать функцию chunkWhile() с помощью Array.reduce():

const chunkWhile = (predicate, arr) =>
  arr.reduce((r, n) => {
    let last = r[r.length - 1]
    
    if(!last || !predicate(last[last.length - 1], n)) {
      last = []
      r.push(last)
    }
    
    last.push(n)
    
    return r
  }, [])

const 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...