javascript - 创建简单动态数组

时间:2012-05-04 15:35:12

标签: javascript

什么是动态创建这个简单数组的最有效方法。

var arr = [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"];

我们可以说我们可以从变量

获得数字10
var mynumber = 10;

16 个答案:

答案 0 :(得分:55)

var arr = [];
for(var i=1; i<=mynumber; i++) {
   arr.push(i.toString());
}

答案 1 :(得分:12)

我将如何做到这一点:

var mynumber = 10;
var arr = new Array(mynumber);

for (var i = 0; i < mynumber; i++) {
    arr[i] = (i + 1).toString();
}

我的答案几乎与每个人的答案相同,但请注意我做了不同的事情:

  • 最好指定数组长度和
  • 不要强迫它扩展

所以我使用new Array(mynumber);

创建了数组

答案 2 :(得分:6)

使用ES2015,可以使用Array.from方法在单个表达式中简洁地实现这一点,如下所示:

Array.from({ length: 10 }, (_, idx) => `${++idx}`)

from的第一个参数是一个类似于对象的数组,它提供了一个length属性。第二个参数是一个map函数,它允许我们根据您的请求将默认的undefined值替换为其调整后的索引值。查看规范here

答案 3 :(得分:4)

听起来你只想构建一个包含整数值字符串版本的数组。一个简单的方法:

var arr = [];
for (var i = 1; i <= mynumber; i++) arr.push(""+i);

对于更有趣的版本,你可以做一个发电机......

function tail(i, maxval) {
    return [i].concat(i < maxval ? tail(i+1, maxval) : []);
}

var arr = tail(1, mynumber);

答案 4 :(得分:2)

var arr = [];
while(mynumber--) {
    arr[mynumber] = String(mynumber+1);
}

答案 5 :(得分:2)

我会这样做;

&#13;
&#13;
Private Sub btnFind_Click()

    Dim ws As Worksheet
    Dim aData As Variant
    Dim vData As Variant
    Dim aResults() As Variant
    Dim lIndex As Long
    Dim sFind As String

    Set ws = ActiveWorkbook.ActiveSheet
    sFind = Me.txtFind.Text
    Me.listResults.Clear

    With ws.Range("A2", ws.Cells(ws.Rows.Count, "A").End(xlUp))
        If .Row < 2 Then
            Me.txtFind.SetFocus
            MsgBox "No data in " & ws.Name
            Exit Sub
        End If
        aData = .Value
        ReDim aResults(1 To WorksheetFunction.CountIf(.Cells, "*" & sFind & "*"), 1 To 1)
    End With

    lIndex = 0
    For Each vData In aData
        If InStr(1, vData, sFind, vbTextCompare) > 0 Then
            lIndex = lIndex + 1
            aResults(lIndex, 1) = vData
        End If
    Next vData

    If lIndex > 0 Then Me.listResults.List = aResults

End Sub
&#13;
&#13;
&#13;

答案 6 :(得分:1)

误读了这个问题,纠正了。尝试:

var myNumber = 100,
    myarr = (function arr(i){return i ? arr(i-1).concat(i) : [i]}(myNumber));

只是为了好玩,如果你这样延伸Array

Array.prototype.mapx = function(callback){
  return String(this).split(',').map(callback);
}

您可以使用:

var myNum = 100, 
    myarr = new Array(myNum).mapx(function(el,i){return i+1;});

答案 7 :(得分:1)

这个答案是关于如何动态创建数组没有循环&#34;。

文字运算符[]不允许我们动态创建,因此让我们查看Array,它的构造函数及其方法。< / p>

在ES2015中,Array有方法.from(),它可以让我们轻松创建动态数组:

Array.from({length: 10}) // -> [undefined, undefined, undefined, ... ]

当Array的构造函数接收number作为第一个参数时,它会创建一个大小为该数字的Array,但它不可迭代,因此我们不能使用.map().filter()等:

new Array(10) // -> [empty × 10]

但是如果我们传递多个参数,我们将从所有参数接收数组:

new Array(1,2,3) // -> [1,2,3]

如果我们使用ES2015,我们可以使用扩展运算符,它将空数组扩散到另一个数组中,所以我们将得到可迭代的数组:

[...new Array(10)]  // -> [undefined, undefined, undefined, ...]

但是如果我们不使用ES2015并且没有polyfill,那么还有一种方法可以在ES5中创建无循环的动态数组。如果我们考虑.apply()方法:它会将第二个参数数组传播到params。所以在Array的构造函数上调用apply会做的事情是:

Array.apply(null, new Array(10))  // -> [undefined, undefined, undefined, ...]

在我们拥有动态可迭代数组之后,我们可以使用map来分配动态值:

Array.apply(null, new Array(10)).map(function(el, i) {return ++i + ""})

// ["1","2","3", ...]

答案 8 :(得分:1)

这款游戏有些晚了,但是现在您可以使用ES6做一些非常酷的事情。

您现在可以在一行代码中用随机数填充动态长度数组!

float random;
void Start () 
{   
    random = Random.Range(-2,21f, 1,53f);
    transform.position = new Vector2(transform.position.x, random);
}

答案 9 :(得分:0)

如果你在询问是否有内置的Pythonic range函数,那么就没有。你必须以蛮力的方式做到这一点。也许你会对rangy感兴趣。

答案 10 :(得分:0)

var arr = [];
for(var i=1; i<=mynumber; i++) {
   arr.push("" + i);
}

根据JSPerf,这在Chrome中似乎更快,但请注意,它完全取决于浏览器。

关于此代码段,您可以更改4件事:

  1. 使用forwhile
  2. 使用向前或向后循环(在开始时向后创建稀疏数组)
  3. 使用push或按索引直接访问。
  4. 使用隐式字符串化或明确调用toString
  5. 在每个浏览器中,总速度将是该列表中每个项目的每个选项在该特定浏览器中执行的效果的组合。

    TL; DR:尝试对这一特定部分进行微观优化可能不是一个好主意。

答案 11 :(得分:0)

我有一个类似的问题,我找到的解决方案(忘了找到它的地方)是这样的:

Array.from(Array(mynumber), (val, index) => index + 1)

答案 12 :(得分:0)

我希望您必须从数组变量中获取最后一个元素,以便我解决方案

  
    

  
var arr = [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"];
var mynumber = arr [arr .length - 1];
//var mynumber = 10;

答案 13 :(得分:0)

我们中的某些人指的是使用from,但效果不佳:

function getArrayViaFrom(input) {
  console.time('Execution Time');
  let output = Array.from(Array(input), (value, i) => (i + 1).toString())
  console.timeEnd('Execution Time');

  return output;
}

function getArrayViaFor(input) {
  console.time('Execution Time 1');
  var output = [];
  for (var i = 1; i <= input; i++) {
    output.push(i.toString());
  }
  console.timeEnd('Execution Time 1');

  return output;
}

console.log(getArrayViaFrom(10)) // Takes 10x more than for that is 0.220ms
console.log(getArrayViaFor(10))  // Takes 10x less than From that is 0.020ms

答案 14 :(得分:0)

已更新=> 2020年6月

如果您正在使用节点js,则可以使用“,”运算符创建或附加字符串值,然后在循环内

IN

您可以看到字符串和对象的类型

答案 15 :(得分:-3)

与您想要动态填充的所有数组的方式相同。 一个for循环。 Suedo代码是

arr =array()
for(i; i<max; i++){
 arr[]=i

}

应该在路上帮助你