Fill: примеры (JAVASCRIPT)

Использование функции fill в JavaScript: практические примеры
Раздел: Массивы, Заполнение
fill(value: T, start?: number, end?: number): T[]

Основные сведения о методе fill()

Метод fill() в JavaScript используется для заполнения всех элементов массива от начального до конечного индексов одним значением. Этот метод изменяет исходный массив и возвращает его модифицированную версию.

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

Синтаксис метода: array.fill(value, start, end)

Аргументы:

  • value (обязательный): значение, которым будут заполнены элементы массива. Может быть любого типа.
  • start (необязательный): индекс начала заполнения (включительно). По умолчанию равен 0. Отрицательные значения отсчитываются с конца массива.
  • end (необязательный): индекс окончания заполнения (не включая этот элемент). По умолчанию равен длине массива. Отрицательные значения отсчитываются с конца.

Возвращаемое значение: измененный исходный массив с заполненными указанными элементами.

Примеры использования fill()

Базовое заполнение массива:

const arr1 = new Array(5).fill(0);
console.log(arr1);
[0, 0, 0, 0, 0]

Заполнение с указанием начального индекса:

const arr2 = [1, 2, 3, 4, 5];
arr2.fill(9, 2);
console.log(arr2);
[1, 2, 9, 9, 9]

Заполнение с указанием начального и конечного индексов:

const arr3 = ['a', 'b', 'c', 'd', 'e'];
arr3.fill('*', 1, 4);
console.log(arr3);
['a', '*', '*', '*', 'e']

Использование отрицательных индексов:

const arr4 = [10, 20, 30, 40, 50];
arr4.fill(99, -3, -1);
console.log(arr4);
[10, 20, 99, 99, 50]

Похожие методы в JavaScript

Array.from() позволяет создавать массивы из итерируемых объектов или массивоподобных структур с возможностью применения функции преобразования к каждому элементу. Подходит для более сложной инициализации.

Циклы for/while обеспечивают полный контроль над процессом заполнения, но требуют больше кода.

Метод map() применяет функцию к каждому элементу массива, возвращая новый массив. Не изменяет исходный массив.

Выбор метода зависит от задачи: fill() оптимален для простого заполнения одинаковыми значениями, Array.from() для создания массивов с вычисляемыми значениями, map() для преобразования существующих данных.

Частые ошибки при работе с fill()

1. Заполнение массива объектов одним и тем же ссылочным значением:

const arr = new Array(3).fill({});
arr[0].name = 'John';
console.log(arr);
[
  { name: 'John' },
  { name: 'John' },
  { name: 'John' }
]

Все элементы ссылаются на один объект. Решение - использование Array.from() с функцией.

2. Непонимание мутации исходного массива:

const original = [1, 2, 3];
const filled = original.fill(0);
console.log(original === filled);
console.log(original);
true
[0, 0, 0]

Метод изменяет исходный массив, а не создает новый.

3. Путаница с индексами при использовании отрицательных значений:

const arr = [1, 2, 3, 4, 5];
arr.fill(0, 1, -1);
console.log(arr);
[1, 0, 0, 0, 5]

Изменения в методе fill()

Метод fill() был добавлен в стандарт ECMAScript 2015 (ES6). С тех пор его спецификация остается стабильной без существенных изменений.

В современных версиях JavaScript метод поддерживается всеми основными браузерами и средой Node.js. Полифиллы могут потребоваться только для очень старых сред выполнения.

Расширенные примеры применения fill()

Создание и заполнение многомерных структур:

Пример javascript
// Создание матрицы 3x3
const matrix = new Array(3)
  .fill()
  .map(() => new Array(3).fill(0));
console.log(matrix);
[
  [0, 0, 0],
  [0, 0, 0],
  [0, 0, 0]
]

Частичное обновление данных с плавающими числами:

Пример javascript
const data = [0.1, 0.2, 0.3, 0.4, 0.5];
data.fill(0.0, 2, 4);
console.log(data);
[0.1, 0.2, 0.0, 0.0, 0.5]

Использование с разными типами данных:

Пример javascript
const mixed = new Array(4).fill(null);
mixed.fill(undefined, 2);
console.log(mixed);
[null, null, undefined, undefined]

Заполнение с использованием функции-генератора значений:

Пример javascript
function createFilled(len, generator) {
  return new Array(len)
    .fill()
    .map((_, i) => generator(i));
}
const squares = createFilled(5, i => (i + 1) ** 2);
console.log(squares);
[1, 4, 9, 16, 25]

Работа с типизированными массивами:

Пример javascript
const buffer = new Uint8Array(8).fill(255, 2, 6);
console.log(buffer);
Uint8Array [0, 0, 255, 255, 255, 255, 0, 0]

Аналоги fill() в других языках

PHP: функция array_fill()

$array = array_fill(0, 5, 'value');
print_r($array);
Array
(
    [0] => value
    [1] => value
    [2] => value
    [3] => value
    [4] => value
)

Python: умножение списков или метод списков, но для заполнения секций используется срез.

arr = [0] * 5  # Создание
arr[1:4] = [9] * 3  # Заполнение части
print(arr)
[0, 9, 9, 9, 0]

C: для массивов используется цикл или функция memset() для байтового заполнения.

int arr[5];
for(int i = 0; i < 5; i++) arr[i] = 0;

Основные отличия: в JavaScript fill() является методом массива и работает с любыми типами данных, изменяя исходный массив. В PHP array_fill() создает новый массив. В Python подход более разнообразный, но нет единого метода, полностью аналогичного fill().

JS fill function comments

En
Fill Fills all the elements of an array from a start index to an end index with a static value