在 JS 中用多个值填充数组的最快方法。我可以将一些模式或函数传递给方法填充 JS 中的单个值吗?

Fastest way to fill an array with multiple value in JS. Can I pass a some pattern or function to method fill insted of a single value in JS?

有什么方法可以创建一个选定大小的数组(例如 10)并立即用一些指定模式的数字(1、2、3 或 2、4、6 等等)填充它) 在 JS 的一个语句中?

let arr = new Array(10).fill( (a) => {a = 1; return a++; } );
console.log(arr); // Should be 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

换句话说,我可以将一些模式或函数传递给填充单个值的方法。

实际上有更好的习惯用法来创建范围:扩展的 Array 构造函数:

[...Array(n)]

创建一个包含 n 个未定义值的数组。要获得 0..n-1,只需选择其 keys:

[...Array(n).keys()]

对于任意范围,将其提供给 map:

r = [...Array(10)].map((_, i) => i + 1)

console.log(r)

看这里:Does JavaScript have a method like "range()" to generate an array based on supplied bounds?

旧答案:

是的,您正在寻找 Array.from:

r = Array.from({length: 10}, (_, i) => i + 1);

console.log(r)

这是如何工作的? .from 检查它的第一个参数(可以是任何对象)并选择它的 .length 属性。然后,它从 0 迭代到 length - 1 并使用两个参数调用第二个参数——一个值(除非第一个参数包含相应的数字 属性,否则它是未定义的)和一个索引,它从 0...length-1 中获取值。在这个例子中,我们有一个函数,它只是 returns 一个索引 + 1,因此给我们 1..length.

这是对上述内容的有用包装:

let range = (from, to) => Array.from({length: to - from + 1}, _ => from++);

console.log(range(1, 10))

对于 ES5,成语是 Array.apply(null, {length:N}):

r = Array.apply(null, {length: 10}).map(function(_, i) {
    return i + 1
})