如何将数组划分为具有灵活输出长度的块?

如何将数组划分为具有灵活输出长度的块?
对于渲染分页来说是必要的,我们在其中元素的位置有限,
如果元素有几页,则需要显示带有数组的按钮(上一个/下一个),而不是el的。

示例f()输入输出,当第一个参数是带有数据的数组时,
并且第二个arg是列表中元素的最大值,包括导航按钮:

      f([1,2,3,4],4) => [1,4]
    f([1,4,5],4) => [[1,3],[4,5]]
  f([1,5,6],6]]
f([1,6,7],[6,7]]
f([7,1],4) => [[7,[2,1]]
f([1,6) => [[1,7]]


最多包含6个元素的设计版式示例

第一页:

如何将数组划分为具有灵活输出长度的块?

第二页:

如何将数组划分为具有灵活输出长度的块?

最后一页:

如何将数组划分为具有灵活输出长度的块?

ldxzzm 回答:如何将数组划分为具有灵活输出长度的块?

我希望这会成功!

a=[1,2,3,4,5,6,7,8,9,2];
result=[];
start = true;
function f(arr,n){
    if(arr.length >= n-2){
        console.log(start)
        if(start){
            start=false;
            result.push(arr.splice(0,n-1))
            return f(arr,n)
        }else{
            result.push(arr.splice(0,n-2))
            return f(arr,n)
        }
    } else {
        result.push(arr);
        return 1;
    }
}
f(a,6);
console.log(result)
,

首先,确定一页或两页是否足够。如果没有,请循环数组。

let f = (array,max) => {
  if (array.length / max <= 1)
    return array

  if (array.length / (max - 1) <= 2)
    return [array.slice(0,max - 1),array.slice(max - 1,array.length)]

  let result = []
  let n = 0
  while (n <= array.length - 1) {
    if (n == 0) {
      result.push(array.slice(n,n + max - 1))
      n += max - 1
    } else {
      let pushAmount = n+max-1 >= array.length ? max-1 : max-2
      result.push(array.slice(n,n + pushAmount))
      n += pushAmount
    }
  }

  return result
}

console.log(f([1,4],4))
console.log(f([1,5],6],7],4))
console.log(f([7,1],6))

,

另一种解决方案-递归。我觉得这有点容易理解。

f = (arr,max,first = true) => {
  if (arr.length == 0) return []
  const last = arr.length <= max - !first
  const curLen = max - !first - !last
  const cur = arr.slice(0,curLen)
  const next = f(arr.slice(curLen),false)
  return [cur,...next]
}


console.log(f([1,6))

本文链接:https://www.f2er.com/2949133.html

大家都在问