1650 Stimmen

Leere Elemente aus einem Array in Javascript entfernen

Wie kann ich leere Elemente aus einem Array in JavaScript entfernen?

Gibt es einen einfachen Weg, oder muss ich eine Schleife durchlaufen und sie manuell entfernen?

2voto

Ashish Rawat Punkte 3245

Keine der oben genannten Antworten eignet sich für alle Typen. Die folgende Lösung entfernt null, undefiniert, {} [] , NaN und bewahrt die Datumszeichenfolge, und das Beste daran ist, dass sie auch aus verschachtelten Objekten entfernt werden kann.

function removeNil(obj) {
    // recursively remove null and undefined from nested object too.
    return JSON.parse(JSON.stringify(obj), (k,v) => {
      if(v === null || v === '') return undefined;
      // convert date string to date.
      if (typeof v === "string" && /^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d.\d\d\dZ$/.test(v))
        return new Date(v);
      // remove empty array and object.
      if(typeof v === 'object' && !Object.keys(v).length) return undefined;
      return v;
    });
  }

function removeNil(obj) {
    // recursively remove null and undefined from nested object too.
    return JSON.parse(JSON.stringify(obj), (k,v) => {
      if(v === null || v === '') return undefined;
      // convert date string to date.
      if (typeof v === "string" && /^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d.\d\d\dZ$/.test(v))
        return new Date(v);
      // remove empty array and object.
      if(typeof v === 'object' && !Object.keys(v).length) return undefined;
      return v;
    });
  }

 const ob = {
  s: 'a',
  b: 43,
  countries: [ 'a', 'b', 'c' ],
  l: null,
  n: { ks: 'a', efe: null, ce: '' },
  d: new Date(),
  nan: NaN,
  k: undefined,
  emptyO: {},
  emptyArr: [],
 }

 const output = removeNil(ob);

 console.log(output);
 console.log('Tests: ', ob.countries.length, typeof(ob.d))

2voto

JessyNinja Punkte 153

Was ist damit?

js> [1,2,,3,,3,,,0,,,4,,4,,5,,6,,,,].filter(String).join(',')
1,2,3,3,0,4,4,5,6

1voto

cluster1 Punkte 4146

Missbräuchliche Verwendung der for ... in (object-member) Schleife. => Nur wahrheitsgemäße Werte erscheinen im Körper der Schleife.

// --- Example ----------
var field = [];

field[0] = 'One';
field[1] = 1;
field[3] = true;
field[5] = 43.68;
field[7] = 'theLastElement';
// --- Example ----------

var originalLength;

// Store the length of the array.
originalLength = field.length;

for (var i in field) {
  // Attach the truthy values upon the end of the array. 
  field.push(field[i]);
}

// Delete the original range within the array so that
// only the new elements are preserved.
field.splice(0, originalLength);

1voto

Joe Pineda Punkte 5293

Das funktioniert, ich habe es getestet in AppJet (Sie können den Code in die IDE kopieren und "reload" drücken, um zu sehen, dass er funktioniert, Sie müssen kein Konto erstellen)

/* appjet:version 0.1 */
function Joes_remove(someArray) {
    var newArray = [];
    var element;
    for( element in someArray){
        if(someArray[element]!=undefined ) {
            newArray.push(someArray[element]);
        }
    }
    return newArray;
}

var myArray2 = [1,2,,3,,3,,,0,,,4,,4,,5,,6,,,,];

print("Original array:", myArray2);
print("Clenased array:", Joes_remove(myArray2) );
/*
Returns: [1,2,3,3,0,4,4,5,6]
*/

1voto

Bhupesh Kumar Punkte 192

Alle leeren Elemente können aus einem Array entfernt werden, indem man einfach array.filter(String); Es gibt alle nicht leeren Elemente eines Arrays in Javascript zurück

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X