我正在尝试找到生成具有以下输出的数组的最佳方法:
[135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 275, 276, 277 , 278, 279, 280, 281, 282, 283, 284, 285, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 675, 676, 677, 678, 679, 700, 701, 702, 703, 704, 705 ...
如您所见,它有一组限制,范围为 140 - 280 - 420 - 560 - 700(每个值加 148) 然后每个值都有一个负 5 和正 5 的区间。
我已经尝试过这种方法
scrollFrom = Array.from(Array(bytesIndexTo).keys()).map(i => 140 + i * 140);
这让我返回:
[140, 280, 420, 560, 700, ...
但是我还需要正负 5 个值间隔...
我还注意到它使用了很多资源。
const prev = [
[135,136,137,138,139],
[275,276,277,278,279],
];
const after = [
[141,142,143,144,145],
[281,282,283,284,285],
];
for (let i = 0; i < scrollFrom.length; i++) {
scrollFrom.push( scrollFrom[i] );
}
这个数组的目的是拥有一组值来帮助我识别某个滚动位置以便执行函数,添加这个间隔将帮助我计算滚动位置,即使用户滚动快速地。
也许我可以加载 .json 中的值并加载它们?
你觉得怎么样?提前致谢
最佳答案
创建中心值数组(例如 [140, 280, 420, 560, 700]
)后,您可以使用 flatMap
迭代每个项目并构造另一个包含其下方和上方 5 个值的数组:
const bytesIndexTo = 4;
const result = Array.from(
{ length: bytesIndexTo },
(_, i) => (i + 1) * 140
)
.flatMap(num => Array.from(
{ length: 11 },
(_, j) => num - 5 + j
));
console.log(result);
关于javascript - 创建特定范围值内的动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60794920/