Есть ли ярлык для создания дополненного массива в JavaScript? - PullRequest
4 голосов
/ 06 декабря 2011

У меня есть этот JavaScript:

function padded_array(k, value){
    var a = [];
    a[k] = value;
    return a;
}

padded_array(3, "hello"); //=> [undefined, undefined, undefined, 'hello']

Можно ли сократить код в теле функции?

Ответы [ 4 ]

16 голосов
/ 09 августа 2016

для всех гуглов, приходящих сюда - вы, вероятно, ищете это:

var pad_array = function(arr,len,fill) {
  return arr.concat(Array(len).fill(fill)).slice(0,len);
}
4 голосов
/ 06 декабря 2011

Если вы хотите исключить «привет», вы можете использовать

new Array(count);

для создания дополненных массивов.

Редактировать: Может быть, как это?

new Array(5).concat("hello")

1 голос
/ 30 марта 2018

Вы можете использовать это, если ваш JS не поддерживает Array.prototype.fill() (например, Google Apps Script) и вы не можете использовать код из первого ответа:

function array_pad(array, length, filler)
{
    while(true)
        if(array.push(filler) >= length)
            break;
    return array;
}
1 голос
/ 06 декабря 2011

Не в стандарте ES5 или предшественнике.Конечно, вы можете сделать что-то вроде $.extend([], {"3": "hello"}) в jQuery;Вы даже можете сделать

Object.create(Array.prototype, {"3": {value: "hello"} });

в чистом ES5, но это хак, я бы не стал рассматривать это как решение (если оно вас устраивает, вы можете его принять).

...