2014-12-17 3 views
3

Я пытаюсь найти лучший способ заполнить массив с помощью JavaScript.Лучший способ заполнения массива 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

этот вопрос может помочь. Он объясняет Array.apply, чтобы заполнить массив данными эффективно http://stackoverflow.com/questions/1295584/most-efficient-way-to-create-a-zero-filled-javascript-array –

+0

Это выглядит хорошо для меня, отлично читаемый. В типизированных массивах нет '.map()' в любом случае. , , – reptilicus

+0

Я смущен, почему он не может просто поставить 'for loop' для запуска 10k раз? Что такое вызов 'arraySize' и' Uint32Array'? – Phil

ответ

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); 
    
  • выражения немедленно вызываемого генератор
  • An (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; 
    }()); 
    

 Смежные вопросы

  • Нет связанных вопросов^_^