Array.prototype.fill()

Aan deze vertaling wordt gewerkt.

De fill() functie verandert alle elementen in een array naar statische waarde. Vanaf de eerste index (standaard 0) tot de laatste index (standaard array.length). De functie geeft de aangepaste array terug.

Syntax

arr.fill(value[, start[, end]])

Parameters

value
Waarde om de array mee te vullen. (Let op, alle elementen in de array krijgen exact deze waarde.)
start Optional
Start index, standaard 0.
end Optional
Laatste index, standaard arr.length.

Return waarde

De aangepaste array, gevuld met value.

Description

  • Als start negatief is, dan wordt het uitgevoerd als array.length + start.
  • Als end negatief is, dan wordt het uitgevoerd als array.length + end.
  • fill is bedoeld als generiek: de this waarde hoeft geen Array object te zijn.
  • fill is een muterende functie: het verandert de array zelf een geeft deze array terug, niet een kopie ervan.
  • Als de eerste parameter een object is, dan zal iedere positie in de array hieraan refereren.

Polyfill

if (!Array.prototype.fill) {
  Object.defineProperty(Array.prototype, 'fill', {
    value: function(value) {

      // Steps 1-2.
      if (this == null) {
        throw new TypeError('this is null or not defined');
      }

      var O = Object(this);

      // Steps 3-5.
      var len = O.length >>> 0;

      // Steps 6-7.
      var start = arguments[1];
      var relativeStart = start >> 0;

      // Step 8.
      var k = relativeStart < 0 ?
        Math.max(len + relativeStart, 0) :
        Math.min(relativeStart, len);

      // Steps 9-10.
      var end = arguments[2];
      var relativeEnd = end === undefined ?
        len : end >> 0;

      // Step 11.
      var finalValue = relativeEnd < 0 ?
        Math.max(len + relativeEnd, 0) :
        Math.min(relativeEnd, len);

      // Step 12.
      while (k < finalValue) {
        O[k] = value;
        k++;
      }

      // Step 13.
      return O;
    }
  });
}

Als verouderde JavaScript engines ondersteund moeten worden, welke Object.defineProperty   niet ondersteunen, dan is het beter om helemaal geen polyfill Array.prototype functies te gebruiken, aangezien ze dan niet non-enumerable te maken zijn.

Voorbeelden

Fill toepassen

[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}

// Een enkel object, waaraan door iedere positie in de array gerefereerd wordt:
let arr = Array(3).fill({}) // [{}, {}, {}]
arr[0].hi = "hi"            // [{ hi: "hi" }, { hi: "hi" }, { hi: "hi" }]

Specificaties

Specificatie
ECMAScript (ECMA-262)
The definition of 'Array.prototype.fill' in that specification.

Browser compatibiliteit

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome voor AndroidFirefox voor AndroidOpera voor AndroidSafari op iOSSamsung InternetNode.js
fillChrome Volledige ondersteuning 45Edge Volledige ondersteuning 12Firefox Volledige ondersteuning 31IE Geen ondersteuning NeeOpera Volledige ondersteuning 32Safari Volledige ondersteuning 8WebView Android Volledige ondersteuning 45Chrome Android Volledige ondersteuning 45Firefox Android Volledige ondersteuning 31Opera Android Volledige ondersteuning 32Safari iOS Volledige ondersteuning 8Samsung Internet Android Volledige ondersteuning 5.0nodejs Volledige ondersteuning 4.0.0
Volledige ondersteuning 4.0.0
Volledige ondersteuning 0.12
Uitgeschakeld
Uitgeschakeld From version 0.12: this feature is behind the --harmony runtime flag.

Legenda

Volledige ondersteuning  
Volledige ondersteuning
Geen ondersteuning  
Geen ondersteuning
Gebruiker moet deze functie expliciet inschakelen.
Gebruiker moet deze functie expliciet inschakelen.

Zie ook