【发布时间】:2020-06-03 23:45:35
【问题描述】:
给了我一个号码。我需要创建一个数组,其中包含下面的 4 个数字、数字本身和上面的 4 个数字。
我天真的方法是创建 2 个 for 循环,但我觉得使用一些 ES6 语法可以更有效地做到这一点。
例如:
generateArray(240) // [236, 237, 238, 239, 240, 241, 242, 243, 244 ];
【问题讨论】:
标签: javascript reactjs
给了我一个号码。我需要创建一个数组,其中包含下面的 4 个数字、数字本身和上面的 4 个数字。
我天真的方法是创建 2 个 for 循环,但我觉得使用一些 ES6 语法可以更有效地做到这一点。
例如:
generateArray(240) // [236, 237, 238, 239, 240, 241, 242, 243, 244 ];
【问题讨论】:
标签: javascript reactjs
const generateArray =
(aroundNumber) => [...Array(9).keys()].map(i => i + aroundNumber - 4);
generateArray(240) // [236, 237, 238, 239, 240, 241, 242, 243, 244 ];
解释:
Array(9) 正在创建一个包含 9 个元素的数组keys() 方法将返回 1,2,3,4,5,6,7,8,9map 将其转换为您需要的范围 - 它采用 i(您要转换为其他数字的数字)并向其添加偏移量(在本例中为 aroundNumber - 4,因为您的数组从数字下方的 4 个元素开始)另外,正如 @Estradiaz 在 cmets 中提到的,您可以使用 Array.from 方法
const generateArray =
(aroundNumber) => Array.from({length: 9}, (v, i) => i + aroundNumber - 4);
您可以阅读有关Array.from() 方法here 的更多信息
【讨论】:
Array.from({length: top - bottom}, (_, i)=> i + bottom)
我会这样做
const generateArray =
(aroundNumber, range) => Array(range * 2 + 1).fill(0).map((_, index) => index + aroundNumber - range);
console.log(generateArray(240, 4));
// alternatively generator
function* generateArrayGenerator (value, range) {
value = value - range;
for(let _ of Array(range * 2 + 1)) {
yield value++;
}
}
console.log([...generateArrayGenerator(240, 4)])
【讨论】: