【问题标题】:Iterate over uneven array遍历不均匀的数组
【发布时间】:2021-09-27 11:58:39
【问题描述】:

所以我有一个包含 16 个项目的数据集,我想在第一组 6 个项目之后每 5 个项目循环一次,所以列是 6 5 5。

最初我尝试过这样的事情,但后来我记得我有一个孤立的项目。

if(thisI <= 6) {
  y = prevtitle.position[0];
} elseif(thisI % 5 == 0) {
  y = prevtitle.position[0] + w + (p *3);
} else {
  y = prevtitle.position[0];
}

不确定是否有一种简单的方法可以在不使用一堆嵌套 if 语句的情况下执行前 6 个然后接下来的 5 个。

【问题讨论】:

  • 你能展示你的数据集数组吗?
  • 所以这里的 cmets 中有一个答案,这似乎是我需要的,但是当我回来刷新它时,它就消失了。我不打算将数组拆分成块。
  • 我更新了我的答案。那是你要找的吗?根据索引设置y 变量的简写方式?

标签: javascript arrays loops if-statement


【解决方案1】:

使用Array#splice:

const splitArr = (arr = []) => {
  const array = [...arr];
  const res = array.length ? [array.splice(0, 6)] : [];
  while(array.length) res.push(array.splice(0, 5));
  return res;
}

console.log( splitArr([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]) );

【讨论】:

  • 我不打算将数组拆分为更多数组。
  • 这个数组的预期结果是什么?
【解决方案2】:

一个简单的三元表达式对你有用吗?

let num = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
num.forEach((n,i) => {
  y = (i<=6 || i % 5 == 0) ? prevtitle.position[0] : prevtitle.position[0] + w + (p *3) ;
})

【讨论】:

    【解决方案3】:

    我猜你是跳过第一个位置,直接跳到第6个位置。

    只需使用普通的 for 循环即可。

    1. 计算您将完成的步数的余数。 16 % 5 产生 1 个余数。
    2. step - countForZero + remainder 在 for 循环中设置起点。
    3. i += step 替换了 for 循环中的典型 i++

    下面的方法可以进行任何一种跳跃,与数组中有多少项无关。

    let num = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];
    
    function getEvery(step, arr) {
      let newArr = [],
          remainder = arr.length % step,
          countForZero = 1;
    
      for (let i = step - countForZero + remainder; i < arr.length; i += step) {
         newArr.push(arr[i]);
      }
    
      return newArr;
    }
    
    console.log( getEvery(5, num) );

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-30
      • 2013-05-27
      • 2020-04-04
      • 2022-01-19
      • 2015-05-15
      • 1970-01-01
      • 2017-08-18
      • 2021-06-07
      相关资源
      最近更新 更多