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]
0
hackrack 19 Apr. 2018 im 00:25

4 Antworten

Beste Antwort

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.

0
user4642212 18 Apr. 2018 im 22:11

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);
0
Matus Dubrava 18 Apr. 2018 im 21:48

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.

-1
Pierre Capo 18 Apr. 2018 im 21:35

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]
3
claytronicon 18 Apr. 2018 im 21:48