创建和填充范围内连续数字的有效方法

时间:2019-04-08 18:19:05

标签: javascript arrays numbers

目前我使用此JavaScript 创建一个具有从0到n的n个数字的数组

// javascript populate array 
var n=1000;
var arr=[n];
for (i=n;i>=0;i--) {
arr[i]=i;
console.log(arr[i]);
} 

这是执行任务的快速/正确方法吗?

5 个答案:

答案 0 :(得分:2)

您可以在使用Array.from时执行声明式方法,如下所示:

arr = Array.from({length: 20}, (e, i)=> i)
console.log(arr)

答案 1 :(得分:2)

使用Array.keys()的ES6方法:

Host FOO ec2-FOO
    User ec2-user
    IdentityFile ~/.ssh/creds/some.pem

    # Irrelevant?
    Hostname example.com

    # Neither alternative works (assume full `aws` command)
    ProxyCommand bash -c 'ssh -i %i %u@$(aws ec2 describe-instances…)'
    ProxyCommand nc $(aws ec2 describe-instances …) %p
    # Note that %i (used here to specify IdentityFile) is not a valid token for
    # ProxyCommand. http://man7.org/linux/man-pages/man5/ssh_config.5.html#TOKENS


到目前为止,已经做了一个快速的JSPerf答案:

https://jsperf.com/array-filling-so/

答案 2 :(得分:2)

您可以使用函数map跳过谓词的第一个参数并获取索引i

let arr = Array(10).fill().map((_, i) => i);
console.log(arr);

答案 3 :(得分:1)

如果您所说的高效是指“最少的字符数”,我认为这比发布的任何答案都要短:

[...Array(10).keys()]

在使用浏览器控制台测试内容时,这样的事情会派上用场。请注意,它比当前接受的答案慢两倍多:

Array.from({length:10},(e,i)=>i)

虽然我没有对性能进行专业测试,但我尝试使用这两种方法创建一个包含 1e8 个元素的数组,使用第一种方法大约需要 5 秒钟,使用第二种方法只需要两秒钟(两种方法都有相当大的可变性)我的小笔记本电脑,而一个包含 1e9 个元素的数组导致它内存不足。

但对于需要定期在浏览器控制台中输入此类内容的人来说,这可能不如易于记忆和输入那么重要。但是请注意,如果您要立即将结果输入 .map(),第一种方法仅短一个字符,相比之下,性能会更差,特别是因为第二种方法不需要单独的 { {1}} 次调用。所以,仅用于调试或试用,但在我看来仍然有用。

答案 4 :(得分:0)

(我认为)最简单的方法[...Array(10)].map((a,b)=>b)

console.log(
  [...Array(10)].map((a,b)=>b)
)