切片数组并从RTL / LTR转换

问题描述 投票:1回答:2

我有一个元素数组,长度发生变化,但始终可以除以8(8,16,24,32,40,48..etc)。

我正在尝试分割前8个元素,并返回它们。然后切下接下来的8个元素,然后反向返回它们。

并重复直到数组为空(RTL然后LTR然后RTL..etc)。

我不确定如何迭代和跟踪。

const print = (value) => document.write(value);

rtl = true
elements = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]

const sliceArr = (arr, cnt) => {
    arr = arr.slice(0,cnt)
    if(rtl) return arr
    else {
      rtl = !rtl; // toggle rtl
    }
}

tmpArray = []

tmpArray = sliceArr(elements, 8)
print(tmpArray)

所需的输出

1,2,3,4,5,6,7,8
16,15,14,13,12,11,10,9
17,18,19,20,21,22,23,24

有人可以指出正确的方向吗?

谢谢!

javascript arrays slice
2个回答
1
投票

您可以使用Array.from()创建一个长度为Array.from()的新数组。在回调中,获取当前索引,并从Math.ceil(elements.length / 8)数组中获取切片。如果elements为0,则返回切片,但如果它是奇数索引,则返回切片的反面:

i % 2

1
投票

您可以切片数组并检查方向。

const elements = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]

const result = Array.from({ length: Math.ceil(elements.length / 8) }, (_, i) => {
  const arr = elements.slice(i * 8, (i + 1) * 8)
  return i % 2 ? arr.reverse() : arr
})

console.log(result.join('\n'))
© www.soinside.com 2019 - 2024. All rights reserved.