Удаление значений undefined из массива
В некоторых ситуациях может случиться, что мы имеем undefined
или вообще значения фальши в структурах массива. Например, при чтении и заполнении данных из некоторых неизвестных источников, таких как базы данных или структуры HTML. Как
var data = [42, 21, undefined, 50, 40, undefined, 9]
Так как это может вызвать проблемы при переходе по таким массивам и работе над элементами, какова наилучшая практика удаления undefined
(значения ложности)?
Ответы
Ответ 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);