数组序列生成
编程中经常需要临时使用一个数组,通常我们会手动的敲出来,但这样不够优雅,那么如何快速的生成数组序列呢?
Array.from(arrayLike[, mapFn[, thisArg]])
这个方法可以快速帮助我们生成数组序列。
Array.from('foo')
// expected output: Array ["f", "o", "o"]
Array.from([1, 2, 3], x => x + x)
// expected output: Array [2, 4, 6]
备注
Array.from()
是浅拷贝。
生成 0-9
的有序数组
Array.from({ length: 10 }, (_, i) => i)
generateArr() 封装
封装为函数,可以指定数组的长度,以及数组的值的范围。
function generateArr(start, end, step) {
return Array.from({ length: end - start + 1 }, (_, i) => start + i * step)
}
生成 A-Z
的有序数组
利用 Ascii 的码值,生成 A-Z 的有序数组。
generateArr('A'.charCodeAt(0), 'Z'.charCodeAt(0), 1).map(i => String.fromCharCode(i))
随机化数组
如何把上文中生成的有序数组随机化呢?
可以借助 Math.random()
。
generateArr(1, 10, 1).sort(() => Math.random() - 0.5)
// expected output: [4, 10, 3, 5, 9, 7, 2, 8, 1, 6]
orderToRandomArr() 封装
把有序数组转换为无序数组。
function generateRandomArr(start, end, step) {
return Array.from({ length: end - start + 1 }, (_, i) => start + i * step).sort(
() => Math.random() - 0.5,
)
}
上面的函数将有序数组转换为无序数组,通常我们还需要生成一个完全的随机数组:
generateRandomArr() 封装
//生成随机数
function randomInteger(min, max) {
let rand = min + Math.random() * (max + 1 - min)
return Math.floor(rand)
}
//生成随机数组
function generateRandomArr(min, max, length) {
return Array.from({ length }, (_, i) => randomInteger(min, max))
}
generateRandomArr(100, 300, 9)
// expected output: [ 162, 286, 225, 213, 123, 254, 284, 171, 173]
参考 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/from