Array.prototype.fill()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since ÑенÑÑбÑÑ 2015 г..
ÐеÑод fill() заполнÑÐµÑ Ð²Ñе ÑлеменÑÑ Ð¼Ð°ÑÑива Ð¾Ñ Ð½Ð°ÑалÑного до конеÑного индекÑов одним знаÑением.
ÐнÑеÑакÑивнÑй пÑимеÑ
const array1 = [1, 2, 3, 4];
// Fill with 0 from position 2 until position 4
console.log(array1.fill(0, 2, 4));
// Expected output: Array [1, 2, 0, 0]
// Fill with 5 from position 1
console.log(array1.fill(5, 1));
// Expected output: Array [1, 5, 5, 5]
console.log(array1.fill(6));
// Expected output: Array [6, 6, 6, 6]
СинÑакÑиÑ
arr.fill(value[, start = 0[, end = this.length]])
ÐаÑамеÑÑÑ
ÐозвÑаÑаемое знаÑение
ÐзменÑннÑй маÑÑив.
ÐпиÑание
ÐлеменÑÑ Ð·Ð°Ð¿Ð¾Ð»Ð½ÑÑÑÑÑ Ð² полÑзакÑÑÑом инÑеÑвале [start, end).
ÐеÑод fill пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð´Ð¾ ÑÑÑÑ
аÑгÑменÑов â value, start и end. ÐÑгÑменÑÑ start и end ÑвлÑÑÑÑÑ Ð½ÐµÐ¾Ð±ÑзаÑелÑнÑми Ñо знаÑениÑми по ÑмолÑаниÑ, ÑавнÑми 0 и length обÑекÑа this ÑооÑвеÑÑÑвенно.
ÐÑли аÑгÑÐ¼ÐµÐ½Ñ start ÑвлÑеÑÑÑ Ð¾ÑÑиÑаÑелÑнÑм, он ÑÑакÑÑеÑÑÑ ÐºÐ°Ðº length+start, где length â ÑÑо длина маÑÑива. ÐÑли аÑгÑÐ¼ÐµÐ½Ñ end ÑвлÑеÑÑÑ Ð¾ÑÑиÑаÑелÑнÑм, он ÑÑакÑÑеÑÑÑ ÐºÐ°Ðº length+end.
ÐеÑод fill намеÑенно ÑвлÑеÑÑÑ Ð¾Ð±Ð¾Ð±ÑÑннÑм, он не ÑÑебÑеÑ, ÑÑÐ¾Ð±Ñ Ð·Ð½Ð°Ñение this внÑÑÑи него бÑло обÑекÑом Array.
ÐеÑод fill ÑвлÑеÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑим меÑодом, он Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ Ð¾Ð±ÑÐµÐºÑ this и веÑнÑÑ ÐµÐ³Ð¾, а не пÑоÑÑо веÑнÑÑ ÐºÐ¾Ð¿Ð¸Ñ.
ÐÑли аÑгÑÐ¼ÐµÐ½Ñ value ÑвлÑеÑÑÑ Ð¾Ð±ÑекÑом, Ñо меÑод fill Ð·Ð°Ð¿Ð¾Ð»Ð½Ð¸Ñ Ð¼Ð°ÑÑив ÑÑÑлками на ÑÑÐ¾Ñ Ð¾Ð±ÑекÑ.
ÐÑимеÑÑ
[1, 2, 3].fill(4); // [4, 4, 4]
[1, 2, 3].fill(4, 1); // [1, 4, 4]
[1, 2, 3].fill(4, 1, 2); // [1, 4, 3]
[1, 2, 3].fill(4, 1, 1); // [1, 2, 3]
[1, 2, 3].fill(4, 3, 3); // [1, 2, 3]
[1, 2, 3].fill(4, -3, -2); // [4, 2, 3]
[1, 2, 3].fill(4, NaN, NaN); // [1, 2, 3]
[1, 2, 3].fill(4, 3, 5); // [1, 2, 3]
Array(3).fill(4); // [4, 4, 4]
[].fill.call({ length: 3 }, 4); // {0: 4, 1: 4, 2: 4, length: 3}
// ÐбÑекÑÑ Ð·Ð°Ð¿Ð¾Ð»Ð½ÑÑÑÑÑ Ð¿Ð¾ ÑÑÑлке.
var arr = Array(3).fill({}) // [{}, {}, {}];
arr[0].hi = "hi"; // [{ hi: "hi" }, { hi: "hi" }, { hi: "hi" }]
ÐолиÑил
if (!Array.prototype.fill) {
Object.defineProperty(Array.prototype, 'fill', {
value: function(value) {
// Шаги 1-2.
if (this == null) {
throw new TypeError('this is null or not defined');
}
var O = Object(this);
// Шаги 3-5.
var len = O.length >>> 0;
// Шаги 6-7.
var start = arguments[1];
var relativeStart = start >> 0;
// Шаг 8.
var k = relativeStart < 0 ?
Math.max(len + relativeStart, 0) :
Math.min(relativeStart, len);
// Шаги 9-10.
var end = arguments[2];
var relativeEnd = end === undefined ?
len : end >> 0;
// Шаг 11.
var final = relativeEnd < 0 ?
Math.max(len + relativeEnd, 0) :
Math.min(relativeEnd, len);
// Шаг 12.
while (k < final) {
O[k] = value;
k++;
}
// Шаг 13.
return O;
}
});
}
ÐÑли вам нÑжно поддеÑживаÑÑ Ð´ÐµÐ¹ÑÑвиÑелÑно ÑÑÑаÑевÑие движки JavaScript, коÑоÑÑе не поддеÑживаÑÑ Object.defineProperty, Ñо лÑÑÑе вообÑе не иÑполÑзоваÑÑ Ð¿Ð¾Ð»Ð¸ÑÐ¸Ð»Ñ Ð´Ð»Ñ Ð¼ÐµÑодов Array.prototype, Ñак как Ð²Ñ Ð½Ðµ можеÑе ÑделаÑÑ Ð¸Ñ Ð½Ðµ пеÑеÑиÑлÑемÑми.
СпеÑиÑикаÑии
| Specification |
|---|
| ECMAScript® 2027 Language Specification > # sec-array.prototype.fill > |