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

Posted

技术标签:

【中文标题】在 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? [duplicate] 【发布时间】:2018-08-04 09:32:32 【问题描述】:

有什么方法可以创建一个选定大小的数组(例如 10)并立即用一些指定模式(1、2、3、OR 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.from(new Array(10), (_, i) => i) // [0, 1, 2, 3, ...] 最快for循环,如果可能的话循环展开esdiscuss.org/topic/… Array(10).fill(1).map((x, y) => x + y) 【参考方案1】:

实际上,创建范围有更好的习惯用法:a spreaded 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 获取值。在这个例子中,我们有一个函数只返回一个索引 + 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
)

【讨论】:

ES5 相当于什么?我试过Array.prototype.slice.call(length:10) 但它的行为与Array(10) 相同 @Pavlo:没有,这就是添加它的原因。 :-) 但是 polyfill 很简单。 @T.J.Crowder 我找到了Array.apply(null, Array(10)) @Pavlo:这与Array.from 不同。 (但它确实创建了一个填充有undefined 的数组)。因此,要获得Array.from,您需要在末尾添加.mapArray.apply(null, Array(10)).map(function(_, i) return i + 1; ); 显然这比真正的polyfill 效率略低,因为它会创建并丢弃两个数组。 @Pavlo:添加...

以上是关于在 JS 中用多个值填充数组的最快方法。我可以将一些模式或函数传递给 JS 中单个值的方法填充吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中用较小的数组复制/填充大数组的最佳方法是啥?

请你告诉我合并两个数组,你有多少种方法

Python进行数组合并的方法

js将一位数组分割成每三个一组

C ++在固定大小9的右填充空终止字符数组中找到第一个空格的最快方法

C++怎样将一个数插入到数组末尾?