Mam następującą tablicę:

var imagesList = [undefined x 1, cars.jpg, undefined x 1, boats.jpg];

Jak filtrować niezdefiniowane? Więc mogę to zrobić w następujący sposób:

var imagesShow = [cars.jpg, boats.jpg];

Nie znalazłem wiele dokumentacji na pozbycie się niezdefiniowanego w tablicy przy użyciu JavaScript.

4
ticktock 25 czerwiec 2017, 21:55

6 odpowiedzi

Najlepsza odpowiedź

Możesz użyć Array#filter z Boolean jako wywołanie zwrotne dla wartości prawdów.

var imagesList = [undefined, 'cars.jpg', undefined, 'boats.jpg'],
    imagesShow = imagesList.filter(Boolean);
    
console.log(imagesShow);
11
Nina Scholz 25 czerwiec 2017, 20:09

Wyświetlając undefined x 2, twoja tablica wyraźnie wskazuje, że jest rzadkim, co oznacza, że nie masz żadnych niezdefiniowanych przedmiotów. Po prostu nie masz kluczy do przechowywania przedmiotów.

Ok, możesz mieć i chcesz zachować prawidłowe elementy void 0 lub undefined (w takim przypadku wszystkie powyższe rozwiązania zawiedzie) lub wartość numeryczna 0 lub null element obiektu (W takim przypadku przyjęta odpowiedź nie powiedzie się).

W celu przekonwertowania rzadkiej tablicy do gęstej formy najbardziej wydajną metodą byłoby for in pętla (lub { {X1}}).

Więc dla pętli rzadkiej tablicy najlepiej jest użyć

var res = [],
    a   = [];
a[1] = "cars.jpg";
a[5] = null;
a[999999] = "beauty.jpg";

// [undefined × 1, "cars.jpg", undefined × 3, null, undefined × 999993, "beauty.jpg"]

function dense(a){
  var r = [];
  for (i in a) r.push(a[i]);
  return r;
}

console.time("test");
res = dense(a);
console.timeEnd("test");
console.log(res);

Teraz porównajmy powyższy kod o eleganckim rozwiązaniu filtrowania;

var res = [],
    a   = [];
a[1] = "cars.jpg";
a[5] = null;
a[999999] = "beauty.jpg";

// [undefined × 1, "cars.jpg", undefined × 3, null, undefined × 999993, "beauty.jpg"]

console.time("test");
res = a.filter(Boolean);
console.timeEnd("test");
console.log(res);

Więc jak widzisz null jest zniknął i jest wolniejszy, ponieważ sprawdza wszystkie nie istniejące klucze. Jednak za pomocą pętli for in utrzymuje fałszywe wartości lub nie jest całkowicie pod kontrolą.

0
Community 20 czerwiec 2020, 09:12

Spróbuj array.filter () Metoda z ES6 arrow wyrażenie funkcji.

var imagesList = [undefined, "cars.jpg", undefined, "boats.jpg"];

var filteredList = imagesList.filter(item => { return item !== undefined });

console.log(filteredList);
1
Rohit Jindal 25 czerwiec 2017, 19:14

Użyj Array.Filter

 var imagesList = [undefined, 'cars.jpg', undefined, 'boats.jpg'];
    var result = imagesList.filter(function( element ) {
       return element !== undefined;
    });
console.log(result);
2
Sajeetharan 25 czerwiec 2017, 18:59

Spróbuj użyć funkcji array.filter

var imagesShow = imagesList.filter(function (value) {
    return value != undefined;
};

Każdy element tablicy, który nie przekazuje sprawdzania w powyższej funkcji wywołania zwrotnego zostanie przesączono - w tym przypadku, jeśli element jest niezdefiniowany.

3
Dennis 25 czerwiec 2017, 19:03

Użyj Array#filter:

var imagesList = [undefined, 'cars.jpg', undefined, 'boats.jpg'];

var result = imagesList.filter(function(v) {
  return v !== undefined;
})

console.log(result);
7
Ori Drori 25 czerwiec 2017, 18:58