Vynechané díry v polích JavaScriptu

Dnes jsem narazil na příklad kódu, který používal delete operátor k odstranění prvku pole. Tato operace je zřídka užitečná, protože vytváří díry v poli.

Pole s dírami se nazývají řídká pole.

let numbers = [1, 2, 3, 4];

delete numbers[1];
delete numbers[2];

console.log(numbers);
// Chrome log: (4) [1, empty × 2, 4]
// Firefox log: Array(4) [ 1, <2 empty slots>, 4 ]

console.log(numbers.length);
// Chrome log: 4
// Firefox log: 4

console.log(numbers.toString());
// Chrome log: '1,,,4'
// Firefox log: '1,,,4'

Přečetl jsem si více o řídkých polích a zjistil jsem, že metody polí jako forEach přeskočte otvory v poli . To jsem nevěděl!

Nalezení chyb způsobených dírami v poli může trvat věky, a proto se budu vyhýbat řídkým polím.

let numbers = [ 1, 2, 3, 4 ];
delete numbers[ 1 ];

numbers.forEach((value, index) => console.log(value, index));
// 1, 0
// 3, 2
// 4, 3

delete není jediný způsob, jak vytvořit řídká pole. Je toho víc!

Řídká pole s literálem pole

Výsledkem následujícího je celek na indexu 1 o délce 3 .

const numbers = [1, , 2];
// Array(3) [ 1, <1 empty slot>, 2 ]

Řídká pole s konstruktorem Array

Výsledkem následujícího je pole empy o délce 3 .

const numbers = Array(3);
// Array(3) [ <3 empty slots> ]

Řídká pole s redefinicí length

Výsledkem následujícího je pole s hodnotami 0 , 1 a 2 o délce 10 .

const numbers = [1, 2, 3]; 
numbers.length = 10;
// Array(10) [ 1, 2, 3, <7 empty slots> ]

Závěr

Vyhýbám se řídkým polím, ale myslím, že je dobré znát tuto zvláštnost JavaScriptu.

Pokud si chcete přečíst více o dírách v JavaScriptových polích, podívejte se do sekce Axel Rauschmayers o dírách v JavaScriptových polích v "Speaking JavaScript".