Kann ich einem leeren Array eine bestimmte Länge geben, die nur so viel Länge von Elementen benötigt? beispielsweise:
var emptyArray = []; // but I need this array takes only 10 elements
for (var i = 0; i < 50; i++) {
emptyArray.push(i);
}
console.log(emptyArray.length) // I want to see 10
console.log(emptyArray) // [0,1,2,3,4,5,6,7,8,9]
4 Antworten
Ein anderer Ansatz ist die Verwendung eines Proxy:
function limitedArray(length) {
return new Proxy([], {
set: (target, prop, value) => {
if (Number(prop) < length) {
target[prop] = value;
}
return true;
}
});
}
var tenArray = limitedArray(10);
for (let i = 0; i < 50; ++i) {
tenArray.push(i);
}
console.log(Array.from(tenArray)); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Sie können stattdessen eine andere set
-Methode verwenden, wenn ein Fehler ausgelöst werden soll, wenn die Länge des Arrays überschritten wird:
set: (target, prop, value) => {
if(!isNaN(prop) && Number(prop) >= length){
return false;
}
if (Number(prop) < length) {
target[prop] = value;
}
return true;
}
Beachten Sie jedoch, dass das Löschen von Elementen etwas mehr Arbeit erfordert.
Eine Möglichkeit wäre, Ihre eigene array
zu definieren und die push
-Methode neu zu definieren.
function MyArray() {};
MyArray.prototype = Object.create(Array.prototype);
MyArray.prototype.push = function(item) {
if (this.length < 10) {
Array.prototype.push.call(this, item);
}
}
const arr = new MyArray();
for (let i = 0; i < 50; i++) {
arr.push(i);
}
console.log(arr);
Nicht direkt wie Sie wollen, aber Sie können etwas Ähnliches haben:
var emptyArray = Array.from({length:50}, (v,i) => undefined);
for(let i=0; i<emptyArray;i++){
emptyArray.push(i);
}
Grundsätzlich richten Sie Ihr Array mit undefinierten Werten mit einer bestimmten Länge ein und führen dann eine Schleife durch, bis Sie die Länge erreicht haben.
Sie können Object.seal () ausprobieren. Beachten Sie, dass ich in diesem Beispiel nicht push () verwende, da dies einen Fehler auslöst, sondern Werte zuweist, da die Werte im Array mit fester Länge veränderbar sind
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/seal
var emptyArray = new Array(10).fill(0);
Object.seal(emptyArray);
for (var i = 0; i < 50; i++) {
emptyArray[i] = i;
}
console.log(emptyArray.length) // I want to see 10
console.log(emptyArray) // [0,1,2,3,4,5,6,7,8,9]