Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Удаление с массива всего что начинается с ddd (https://javascript.ru/forum/misc/68547-udalenie-s-massiva-vsego-chto-nachinaetsya-s-ddd.html)

dima85 23.04.2017 09:47

Удаление с массива всего что начинается с ddd
 
JsonData.names здесь у меня хранятся такие данные:
["dd123",
"dd322",
"dd453",
"gg444",
"gg554"]


Подскажите пожалуйста как с переменной удалить все данные которые начинаются с dd*

SV0L0CH 23.04.2017 10:08

http://javascript.ru/RegExp
http://javascript.ru/RegExp/test
http://javascript.ru/Array/splice

dima85 23.04.2017 10:19

Есть какое-то более красивое решение?
for(i = 0;i<jsonData.names.length;i++) {
if (jsonData[i].name.substring(0,2) == 'dd') {
jsonData.name.splice(i);
}
}

ksa 24.04.2017 09:39

Без цикла...

var arr=[
	"dd123",
	"dd322",
	"dd453",
	"gg444",
	"gg554",
	"dd789"
];
var str=arr.toString();
str=str.replace(/(^|,)?dd.*?(,|$)/gm,'');
arr=str.split(',');
alert(arr);

SV0L0CH 24.04.2017 12:35

ksa,
В этом случае создаётся новый массив, а удалить надо из заданного. Вдруг он связывает несколько замыканий и необходимо на них повлиять одинаково. Или может в нём есть нечисловые поля и надо сохранить его поведение. Иначе, я бы рекомендовал не splice а нечто наподобие этого:
var arr = [
    "dd123",
    "dd322",
    "dd453",
    "gg444",
    "gg554",
    "dd789"
];
alert(JSON.stringify(arr.filter(function(str){
    return !(/^dd.*$/.test(str));
})));

Хотя, можно проделать и такое:
var tmp = arr.filter(function(str){
    return !(/^dd.*$/.test(str));
});
arr.length = 0;
[].push.apply(arr, tmp);

ksa 24.04.2017 13:50

Цитата:

Сообщение от SV0L0CH
Вдруг он связывает несколько замыканий

А вдруг нет... :D
Порой это просто гвоздь и его просто нужно забить молотком. ;)

Alexandroppolus 24.04.2017 13:50

вариант без вспомогательного массива, за время O(N)

for (var p = 0, i = 0, le = arr.length; i < le; ++i) {
  if (!/^dd/.test(arr[i])) {
    arr[p++] = arr[i];
  }
}
arr.length = p;


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