JavaScript中使用keys等方法生成0到N自定义步长递增数组的实现问题
问题根因
map 方法会遍历数组的全部元素,对每个索引执行相同的计算逻辑,无法实现按步长跳过索引的效果,你之前给每个索引统一加step的写法,自然会得到连续递增的不符合预期的结果。
符合限制条件的实现方案
两种方案均满足要求:使用Array构造函数和keys()方法、单行实现、无for循环。
场景1:需要得到你预期的0,5,10,15,20结果(最大值等于arrLength)
const newArr = [...Array(Math.floor(arrLength / step) + 1).keys()].map(i => i * step);
逻辑:先按目标元素个数(总长度除以步长加1)构造数组,通过keys()拿到0到N-1的索引,再通过map将每个索引乘以步长,直接得到符合要求的等差序列。
场景2:严格基于长度为arrLength的原数组,仅保留索引为step倍数的元素
const newArr = [...Array(arrLength).keys()].filter(i => i % step === 0);
逻辑:先拿到原数组的所有索引,通过filter筛选出能被step整除的索引即可。如果你的arrLength是20,这个方案输出结果为0,5,10,15,如果需要包含20,把arrLength调整为21即可。
内容的提问来源于stack exchange,提问作者hexaquark
相关产品推荐
相关产品推荐

