генерировать массив в JavaScript - PullRequest
0 голосов
/ 11 января 2012

Я пытаюсь сгенерировать двумерный массив n * m в javascript, полном нулей. Какой самый быстрый способ сделать это?

Я знаю, что простого цикла for было бы достаточно, чтобы установить все элементы в 0, но я хотел бы знать, почему я не могу сделать это с отображением. Например, с подчеркиванием lib (или даже родной картой)

_.map(Array(n),function(a){return 0}) // makes {undefined,undefined,...}

, а

_.map([1,2,3,5,6],function(a){return 0}) // makes {0,0,0,0,0}

Может кто-нибудь объяснить, могу ли я заполнить пустой массив функцией карты и как, или почему нет?

PS: Есть тривиальное решение моей проблемы, я просто спрашиваю об этом, потому что я хотел бы узнать больше, и я не могу найти достаточно хороший ответ в Google. Спасибо

Ответы [ 2 ]

4 голосов
/ 11 января 2012

Типичные функции JavaScript .map() игнорируют элементы массива, которые undefined. Вот почему Array(n) не работает.


Вы можете легко добавить метод к Array.prototype для быстрого заполнения ...

Array.prototype.fill = function(n,v) {
    n = n || this.length;
    for( var i = 0; i < n; i++ ) 
        this[i] = v === void 0 ? i : v;
    return this;
};

тогда ...

Array().fill(3); // [0,1,2]

Array().fill(3, 0); // [0,0,0]
1 голос
/ 11 января 2012

Простой трюк может быть:

var myarr = '0000000000'.split('');

Другой способ - создать собственное расширение карты, чтобы иметь возможность работать с Array(n):

Array.prototype.mapx = function(callback){
  return this.join(',').split(',').map(callback);
}
//usage
Array(5).mapx(function(){return 0;}); //=> [0,0,0,0,0]

Я быдумаю, что первый самый быстрый, но нет времени (сейчас), чтобы проверить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...