【发布时间】:2021-02-10 02:09:20
【问题描述】:
这是一个简单的 Vue.js 测试应用程序,代码如下:
<template>
<div>
<button @click="onPrevious">Previous</button>
<button @click="onNext">Next</button>
<br><br>
<div v-for="(a, index) in chunkedArr()" :key="index">
<div v-for="(i, index) in a" :key="index">{{ i }}</div>
-
</div>
</div>
</template>
<script>
export default {
data() {
return {
input: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
newInput: [],
currentIndex: 0
}
},
mounted() {
const temp = []
for (let i = 0; i < this.input.length; i += 3) {
let chunk = this.input.slice(i, i + 3)
if (chunk.length === 1) {
chunk = chunk.concat(this.input.slice(0, 2))
}
if (chunk.length === 2) {
chunk = chunk.concat(this.input.slice(0, 1))
}
temp.push(chunk)
}
this.newInput = temp.flat()
},
methods: {
chunkedArr() {
if (this.newInput.length === 0) {
return
}
const output = []
for (let i = this.currentIndex; i < this.newInput.length; i += 3) {
let chunk = this.newInput.slice(i, i + 3)
output.push(chunk)
}
console.log(output)
return output
},
onNext () {
this.chunkedArr()
},
onPrevious () {
// TODO
}
},
}
</script>
我们可以使用 Next 和 Previous 按钮模拟轮播。假设我们有一些应该在轮播中显示的元素数组。
但是,在这个轮播中,我们应该一次显示 3 个元素。这意味着只有在每次单击 Next/Previous 时才能看到 3 个元素。例如,如果我们有一个元素数组:1、2、3、4、5、6、7、8、9、10、11,则初始状态为显示:1、2、3。第一次单击下一步时,轮播应显示 4、5、6 等。数组末尾有 3 个案例。数组末尾可以有 1、2 或 3 个元素。如果它有 3 个元素,那么一切都很容易。但是如果它有 1 个或 2 个元素,我们需要分别添加 2 个或 1 个元素。如果最后有 1 个元素,我们需要添加数组的前 2 个元素以显示 3 个元素。如果最后有 2 个元素(我们的测试用例),我们只需要添加第一个元素才能显示 3 个元素。轮换应该根据之前描述的场景进行。
请看一下所附截图:
在实际情况下,我需要 BootstrapVue 的 Carousel 的数据结构。
更新:
输出数组中有 4 个子数组。请看下面的截图:
更新:
【问题讨论】:
-
您说的是子数组,但在您的输出示例中没有子数组。只需双倍空格而不是嵌套 []。你应该说清楚..
-
如果没有元素丢失怎么办。 newInput 还是一样的吗?
-
如果元素没有丢失,数组可能如下所示:1,2,3,4,5,6,7,8,9,10,11,12。也就是说,我们立即拥有所有包含 3 个元素的子数组。