Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Удаление из массива (https://javascript.ru/forum/misc/53238-udalenie-iz-massiva.html)

AntonMs 26.01.2015 14:36

Удаление из массива
 
Подскажите пожалуйста самый быстрый способ удалить из массива элементы где есть undefined, в массиве 900 - 1300 элементов.
var a = ["82undefined", "82undefined", "822025", "822025", "5undefined2775", "83232"]

Erolast 26.01.2015 14:56

ES5:
array = array.filter(function(string) {
    return ~string.indexOf("undefined");
});

ES6:
array = array.filter((string) => string.contains("undefined"));

AntonMs 26.01.2015 16:49

Выдает ошибку: "Uncaught TypeError: undefined is not a function"

tsigel 26.01.2015 16:54

var a = ["82undefined", "82undefined", "822025", "822025", "5undefined2775", "83232"]

a = a.filter(function(string) {
    return string.indexOf("undefined") == -1;
});

alert(a);

Safort 26.01.2015 17:02

AntonMs,
второй вариант не везде поддерживается.

AntonMs 26.01.2015 18:01

Вложений: 1
var a = []
$('#form').change(function(){
//здесь в цикле методом .push() создается массив

a = a.filter(function(string) {
    return string.indexOf("undefined") == -1;//здесь выдает ошибку
})
alert(a)

})

Safort 26.01.2015 18:35

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



В каком браузере тестируешь?

AntonMs 26.01.2015 18:43

браузер Chrome

цыкл .each

AntonMs 26.01.2015 19:20

Заработало! Но Я так и не понял что не так делал)
Напоследок вопрос
Как быстрее?

После цикла прописать:
sizef.filter(function(string) {
    return string.indexOf("undefined") == -1;
})


или в цикл вставить:
b = новый элемент массива
if(b.indexOf("undefined") == -1){a.push(b)}

ruslan_mart 26.01.2015 19:54

AntonMs, используй то, что больше нравится. Разница скорости тут просто ничтожна. Но могу только сказать, что вариант с filter в старых браузерах работать не будет.


Часовой пояс GMT +3, время: 15:04.