2015-02-19 10 views
15

W niektórych sytuacjach może się zdarzyć, że mamy wartości undefined lub ogólnie falsy w strukturach Array. Na przykład podczas odczytu i wypełniania danych z nieznanych źródeł, takich jak bazy danych lub struktury HTML. JakUsuwanie niezdefiniowanych wartości z tablicy

var data = [42, 21, undefined, 50, 40, undefined, 9] 

ponieważ może to spowodować problemy podczas zapętlenie nad takimi tablicami i pracy na elementach, co jest najlepszą praktyką aby usunąć undefined (wartości falsy)?

+0

Jak o tym http://jsfiddle.net/5uuyoo5t/? –

Odpowiedz

41

Tutaj może być oczywiste użycie Array.prototype.filter. Tak aby usunąć wartości tylko niezdefiniowane moglibyśmy nazwać

var data = [42, 21, undefined, 50, 40, undefined, 9]; 

data = data.filter(function(element) { 
    return element !== undefined; 
}); 

Jeśli chcemy odfiltrować wszystkie wartości falsy (takie jak 0 lub NULL) możemy użyć return !!element; zamiast.

Ale możemy zrobić to slighty bardziej elegancki, po prostu przekazując funkcję Boolean konstruktora odpowiednio funkcję Number konstruktora do .filter:

data = data.filter(Number); 

To by wykonać zadanie w tym przypadku, na ogół usunąć falsy wartość, nazwalibyśmy

data = data.filter(Boolean); 

S konstruktor Boolean() zwraca true na wartości truey i false na dowolnej wartości falsy, jest to bardzo schludna opcja.

+2

Pamiętaj, że 'filter (Number)' również usuwa '0'. – Lewis

+0

spowoduje to także usunięcie wartości falseta, takich jak "false", które mogą istnieć w tablicy – lfender6445

1
var a = ["3","", "6"]; 
var b = [23,54,56]; 
var result = []; 

for (var i=0;i<a.length;++i) { 
    if (a[i] != "") { 
     result[i] = b[i]; 
    } 
} 

result = result.filter(function(element) { 
    return element !== undefined; 
}); 

console.log(result); 
0

Array.prototype.reduce() mogą być wykorzystywane do usuwania elementów poprzez stan z tablicy, ale z dodatkową transformację elementów jeśli wymagane w jednej iteracji.


Usuń wartości undefined z tablicy, z obsługą pod-tablic.

function transform(arr) { 
    return arr.reduce((memo, item) => { 
     if (typeof item !== "undefined") { 
      if (Array.isArray(item)) item = transform(item); 
      // We can transform item here. 
      memo.push(item); 
     } 
     return memo; 
    }, []); 
} 

let test1 = [1, 2, "b", 0, {}, "", , " ", NaN, 3, undefined, null, 5, false, true, [1, true, 2, , undefined, 3, false, ''], 10]; 

console.log(transform(test1)); 

Wypróbuj jsfiddle.net/bjoy4bcc/

12

Inline użyciu lambda

result.filter(item => item); 
+0

, tym samym usunie wszystkie wartości falsey. Ponieważ PO określił wartości falsera jako niechciane, jest to zdecydowanie najlepsza odpowiedź IMO. Jednak twój konkretnie wskazuje na niezdefiniowane, w którym momencie chcesz 'result.filter (item => item! == undefined)' –

+0

Podoba mi się ... działa jak magia – undefined

Powiązane problemy