Вот способ сделать это через ES6:
let arr = ['a', 'b', '1', '2', 'a1', 'a2', 'c', '3', 'a3']
const splitFn = (str) => Number.isInteger(+str) ? 0 : str.length == 1 ? 1 : 2
const myChunkFunction = (arr, fn) => arr.reduce((r,c) => {
let t = fn(c)
r[t] = [...r[t], c]
return r
}, [[],[],[]])
console.log(myChunkFunction(arr, splitFn))
typeFn
играет роль фильтрации элементов по number
, string with 1 length
и other
.Этот вывод используется myChunkFunction
для размещения элемента в правильном массиве.
Вы можете сделать что-то подобное с меньшим контролем и в одну строку с массивом reduce
и ES6спред:
let arr = ['a', 'b', '1', '2', 'a1', 'a2', 'c', '3', 'a3']
const result = arr.reduce((r,c) =>
(Number.isInteger(+c) ? r[0] = [...r[0], c] :
c.length == 1 ? r[1] = [...r[1], c] : r[2] = [...r[2], c], r), [[],[],[]])
console.log(result)
Вы начинаете с [[],[],[]]
и заполняете каждый из подмассивов, основываясь на числе, длине строки == 1, других длинах.
Youможет обернуть это в функцию.