Я хочу, чтобы мой массив имел минимальную длину n.

Если количество элементов меньше заданной длины, то я хочу, чтобы оно было заполнено заданным элементом / значением по умолчанию, пока длина не станет n.

Это очень похоже на функцию String padEnd.

a=[1,2,3]
a.padEnd(6, null);
a;// [1,2,3,null,null,null];

Мое решение до сих пор:

n = 10, value = {};
arr.concat(Array(n).fill(value, 0, n)).slice(0, n);
7
Muhammad Umer 27 Янв 2020 в 20:18

3 ответа

К сожалению, для этого нет встроенной функции. Но вы всегда можете сделать это самостоятельно:

const a = [1,2,3];
a.concat(Array(6 - a.length).fill(null));

Вы можете создать функцию, следуя вышеописанному подходу, и сделать ее частью своих собственных помощников Array, но в качестве хорошей практики JS воздержитесь от изменения prototype собственных объектов:

Не изменяйте объекты, которые вы не можете контролировать.

Наконец, что касается документов, здесь вы можете перейти: https: //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array

0
Jose Guzman 27 Янв 2020 в 17:39

Я не уверен, есть ли для этого встроенная функция, но вы могли бы создать свою собственную так.

Эта функция создаст массив длины оставшегося элемента, который будет добавлен, и установит для них значение null в этом случае. Затем он добавит значения в текущий массив.

let originalArray = [1,2,3];

Object.defineProperty(Array.prototype, "padEnd", {
    enumerable: false,
    writable: true,
    value: function(value, number) {
      this.push(...new Array(number - this.length).fill(value));
      return this;
    }
});

console.log(originalArray.padEnd(null, 6));

Если вы хотите получить больше информации о функции defineProperty, ознакомьтесь с ответом Берги здесь.

2
Nicolas 27 Янв 2020 в 17:39

Для массивов такого метода пока нет, но можно добавить вот так

Array.prototype.padEnd = function (number, value) {
  if (this.length >= number) return this;
  const values = new Array(number - this.length).fill(value);
  this.push.apply(this, values);
  return this;
}

let a = [1,2,3]
a.padEnd(6, null);

console.log(a);

let b = [1,2,3,4,5,6,7];

b.padEnd(6, null);
console.log(b);
0
Zohaib Ijaz 27 Янв 2020 в 17:31