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".