Frage von tWeuster, 19

Javascript nummerisches Array das nicht bei 0 anfängt setzten im use strict modus?

Moin,

würde gerne ein nummerisches Array, dass nicht bei 0 anfängt, im use strict modus setzen:

var arArray = [];
arArray[7] = "irgendwas";

Problem. Die Zahlen 0-6 werden mit null aufgefühlt. Also bekomme ich dies:

alert( arArray.length ); //--- 7, soll aber 1 sein

Gibts da eine einfache Lösung ohne auf Objekte zu setzen?

Antwort
von getname, 7

Dass die Elemente in einem Array aufgefüllt werden soll so sein.

Ich würde mir an deiner Stelle schnell einen "Index" Typ machen:

function Index() {
this.data = {};
this.length = 0;
}

Index.prototype.set = function(index, value) {
if (typeof index !== 'number') {
throw new Error('Expected "index" to be a number.');
}

this.data[index.toString()] = value;
this.length++;
}

Index.prototype.get = function(index) {
if (typeof index !== 'number') {
throw new Error('Expected "index" to be a number.');
}

return this.data[index.toString()];
}

Index.prototype.remove = function(index) {
if (typeof index !== 'number') {
throw new Error('Expected "index" to be a number.');
}

delete this.data[index.toString()];
this.length--;
}

Den kannst du dann so verwenden:

var array = new Index();

array.set(7, "irgendwas");

console.log("Length: " + array.length);
console.log("value: " + array.get(7));

array.set(8, "was anderes");

console.log("Length: " + array.length);
console.log("value: " + array.get(8));

array.remove(7);
console.log("Length: " + array.length);
console.log("value: " + array.get(8));
console.log("element at 7:" + array.get(7));
Kommentar von tWeuster ,

Danke für deine Antwort.

Ein Freund von mir hatte eine bessere Idee. Er meinte ich soll einfach ein x vor die nummern schreiben. Dann ist es nicht mehr nummerisch und wird nicht aufgefüllt.

Also:

var arArray = [];
arArray["x7"] = "irgendwas";

 ist pragmatisch und funktioniert :).

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten