Удаление из массива
Подскажите пожалуйста самый быстрый способ удалить из массива элементы где есть undefined, в массиве 900 - 1300 элементов.
var a = ["82undefined", "82undefined", "822025", "822025", "5undefined2775", "83232"] |
ES5:
array = array.filter(function(string) {
return ~string.indexOf("undefined");
});
ES6:
array = array.filter((string) => string.contains("undefined"));
|
Выдает ошибку: "Uncaught TypeError: undefined is not a function"
|
var a = ["82undefined", "82undefined", "822025", "822025", "5undefined2775", "83232"]
a = a.filter(function(string) {
return string.indexOf("undefined") == -1;
});
alert(a);
|
AntonMs,
второй вариант не везде поддерживается. |
Вложений: 1
var a = []
$('#form').change(function(){
//здесь в цикле методом .push() создается массив
a = a.filter(function(string) {
return string.indexOf("undefined") == -1;//здесь выдает ошибку
})
alert(a)
})
|
AntonMs,
значит у тебя как-то не так изменяется массив. У меня всё работает.
var a = [];
for (var i = 0; i< 5; i++) {
a.push('undefined' + i);
}
a.push('text');
a.push('next text');
a = a.filter(function(string) {
return string.indexOf("undefined") == -1;
});
alert(a);
В каком браузере тестируешь? |
браузер Chrome
цыкл .each |
Заработало! Но Я так и не понял что не так делал)
Напоследок вопрос Как быстрее? После цикла прописать:
sizef.filter(function(string) {
return string.indexOf("undefined") == -1;
})
или в цикл вставить:
b = новый элемент массива
if(b.indexOf("undefined") == -1){a.push(b)}
|
AntonMs, используй то, что больше нравится. Разница скорости тут просто ничтожна. Но могу только сказать, что вариант с filter в старых браузерах работать не будет.
|
Цитата:
function cond(string) {
return string.indexOf("undefined") == -1;
}
var a = [];
a.push = function(){
return [].push.apply(this, [].filter.call(arguments, cond));
}
a.unshift = function(){
return [].unshift.apply(this, [].filter.call(arguments, cond));
}
a.push("82undefined", "82undefined", "822025", "822025", "5undefined2775", "83232");
alert(JSON.stringify(a));
a.unshift("82undefined", "82undefined", "822025", "822025", "5undefined2775", "83232");
alert(JSON.stringify(a));
|
Проверил оба варианта, и на глаз определил что второй вариант быстрее.
В массиве иногда бывает до 1000 элементов, при таких обьемах это заметно. |
| Часовой пояс GMT +3, время: 02:51. |