【问题标题】:How to get future items and past items by specific index like in a carousel如何通过特定索引获取未来的项目和过去的项目,比如在轮播中
【发布时间】:2020-11-13 07:40:17
【问题描述】:

我正在尝试创建自定义轮播。
我被算法困住了。
我需要按特定索引获取未来和过去的项目。

旋转木马可以无限移动。

示例: var exampleArray = [1,2,3,4,5,6,7,8,9];

slice(exampleArray, 0); -->> currentItem = [1],futureItems = [2,3,4,5],pastItems = [6,7,8,9]
切片(示例数组,4); -->> currentItem = [5],futureItems = [6,7,8,9],pastItems = [1,2,3,4]
切片(示例数组,7); -->> currentItem = [8],futureItems = [9,1,2,3],pastItems = [4,5,6,7]

【问题讨论】:

  • 到目前为止你尝试了什么?
  • Cyrille Pontvieux 我可以通过这样做获得未来的物品var rightEndItems = arr.slice(index + 1, index + Math.ceil(arr.length / 2)); var rightStartItems = arr.slice(0, Math.floor(arr.length / 2) - rightEndItems.length); var futureItems = [...rightEndItems, ...rightStartItems]; 但卡住了过去的物品
  • 请始终通过edit将所有相关详细信息添加到您的问题中。 (然后删除您的评论。)

标签: javascript arrays algorithm carousel


【解决方案1】:

您可以使用this question 的解决方案之一(我喜欢@mickmackusa 的)来旋转阵列以将所需的currentItem 置于中间;那么你可以只取中间之前的切片为pastItems,中间元素为currentItem,中间之后的切片为futureItems

const slicer = (arr, idx) => {
  let len = arr.length;
  let mid = Math.floor(len/2);
  let rotated = arr.slice(0);
  rotated = rotated.concat(rotated.splice(0, (mid + idx + 1) % len));
  return [rotated.slice(0, mid), [rotated[mid]], rotated.slice(mid+1)]
}

const exampleArray = [1,2,3,4,5,6,7,8,9];

[pastItems, currentItem, futureItems] = slicer(exampleArray, 0);
console.log(pastItems);
console.log(currentItem);
console.log(futureItems);

[pastItems, currentItem, futureItems] = slicer(exampleArray, 4);
console.log(pastItems);
console.log(currentItem);
console.log(futureItems);

[pastItems, currentItem, futureItems] = slicer(exampleArray, 7);
console.log(pastItems);
console.log(currentItem);
console.log(futureItems);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-24
    相关资源
    最近更新 更多