更好的填充javascript数组的方法

时间:2014-12-17 22:09:56

标签: javascript arrays idiomatic

我试图找到一种更好的方法来使用JavaScript填充数组。

目前我有一个看起来像这样的函数来生成一个固定大小的样本数据数组。我需要样本数据不相同(非同质),最好是伪随机。

function () {
    var arraySize = (1024 * 10) / 4;  // Get size for 10k buffer

    var testdata = new Uint32Array(arraySize);

    for (var i = 0; i < arraySize; i++) {
        testdata[i] = Math.random() * 0xFFFFFFFF;
    };

    //...
};

它有效,但我怀疑它对JavaScript来说不是很惯用。

我更关注的是,对于我正在运行的测试,我将需要更大(和更大!)的数组,所以我担心系统会因为其他临时对象而饱和。

是否有更有效/惯用的方法来填充数组?

1 个答案:

答案 0 :(得分:2)

你的方法很好,很容易理解。

EcmaScript 6可能有更多惯用或至少简洁的方法:

  • TypedArray.from

    Uint32Array.from( {length: 1024 * 10 / 4 /* 10k buffer */}, function() {
        return Math.random() * 0xFFFFFFFF;
    })
    // Alternatively, with an arrow function as a one-liner:
    Uint32Array.from( {length: 2560 }, () => Math.random() * 0xFFFFFFFF );
    
  • 立即调用的生成器表达式(IIGE),用于按需创建迭代器:

    new Uint32Array(function*() {
        var arraySize = (1024 * 10) / 4;  // Get size for 10k buffer
        for (var i=0; i<arraySize; i++)
            yield Math.random() * 0xFFFFFFFF;
    }());