Подтвердить что ты не робот

Удаление значений undefined из массива

В некоторых ситуациях может случиться, что мы имеем undefined или вообще значения фальши в структурах массива. Например, при чтении и заполнении данных из некоторых неизвестных источников, таких как базы данных или структуры HTML. Как

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

Так как это может вызвать проблемы при переходе по таким массивам и работе над элементами, какова наилучшая практика удаления undefined (значения ложности)?

4b9b3361

Ответ 1

Использовать Array.prototype.filter здесь может быть очевидно. Таким образом, чтобы удалить только значения undefined, мы могли бы назвать

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

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

Если мы хотим отфильтровать все значения фальши (такие как 0 или нуль), мы можем вместо этого использовать return !!element;.

Но мы можем сделать это немного более элегантно, просто передав конструктор Boolean, соответственно конструктор Number на .filter:

data = data.filter( Number );

Это сделало бы работу в этом случае, чтобы вообще удалить любое значение фальшивки, мы бы назвали

data = data.filter( Boolean );

Так как конструктор Boolean() возвращает true по значениям правды и false по любому значению фальши, это очень опрятный вариант.

Ответ 2

Inline, используя lambda

result.filter(item => item);

Ответ 3

Вы можете использовать метод lodash compact, который удаляет null, undefined и ''

_.compact(data)

Ответ 4

Array.prototype.reduce() может использоваться для удаления элементов по условию из массива, но с дополнительным преобразованием элементов, если требуется на одной итерации.


Удалите значения undefined из массива с поддержкой вспомогательных массивов.

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));

Попробуйте на jsfiddle.net/bjoy4bcc/

Ответ 5

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);

Ответ 6

var arr1 = [NaN, 0, 15, false, -22, '', undefined, 47, null];

var array1 = arr1.filter(function (e) {return e;});

document.write (массив1);

однорядный ответ

Ответ 7

Если у вас есть массив объектов и вы хотите удалить все элементы null и undefined:

[].filter(item => !!item);