跳到主要内容

数组序列生成

编程中经常需要临时使用一个数组,通常我们会手动的敲出来,但这样不够优雅,那么如何快速的生成数组序列呢?

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