Вы можете разбить массив на 8 pieces each
, а затем просто использовать Array.reverse и Array.flat .Преимущество этого заключается в том, что вы получаете хороший функциональный, многократно используемый, кодируемый и очень читаемый код.
Учтите это:
let data = [1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,0]
// utility function to chunk array by number
const chunkBy = (arr, by=2) => arr.reduce((r,c,i) => (i%by==0 ? r.push([c]) : r[r.length-1] = [...r[r.length-1], c], r), [])
let result = chunkBy(data, 8).reverse().flat()
console.log('in: ', data.join(''))
console.log('out: ', result.join(''))
Вот функция chunkBy
в более удобочитаемой форме:
let data = [1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,0]
const chunkBy = (arr, by=2) => // default to chunks of 2
arr.reduce((acc, cur, index) => {
if(index % by == 0) // use modulo to check for the remainder
acc.push([cur]) // if exact then we start a new chunk
else // if not we keep adding to the previous chunk
acc[acc.length-1] = [...acc[acc.length-1], cur]
return acc
}, [])
console.log(chunkBy(data, 8))
Если вы используете lodash _.chunk
уже существует:
let data = [1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,0]
let result = _(data)
.chunk(8)
.reverse()
.flatten()
.value()
console.log(result.join(''))
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>