Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.04.2017, 09:47
Профессор
Отправить личное сообщение для dima85 Посмотреть профиль Найти все сообщения от dima85
 
Регистрация: 14.03.2010
Сообщений: 194

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


Подскажите пожалуйста как с переменной удалить все данные которые начинаются с dd*
Ответить с цитированием
  #2 (permalink)  
Старый 23.04.2017, 10:08
Профессор
Отправить личное сообщение для SV0L0CH Посмотреть профиль Найти все сообщения от SV0L0CH
 
Регистрация: 07.11.2010
Сообщений: 301

http://javascript.ru/RegExp
http://javascript.ru/RegExp/test
http://javascript.ru/Array/splice
Ответить с цитированием
  #3 (permalink)  
Старый 23.04.2017, 10:19
Профессор
Отправить личное сообщение для dima85 Посмотреть профиль Найти все сообщения от dima85
 
Регистрация: 14.03.2010
Сообщений: 194

Есть какое-то более красивое решение?
for(i = 0;i<jsonData.names.length;i++) {
if (jsonData[i].name.substring(0,2) == 'dd') {
jsonData.name.splice(i);
}
}
Ответить с цитированием
  #4 (permalink)  
Старый 24.04.2017, 09:39
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,209

Без цикла...

var arr=[
	"dd123",
	"dd322",
	"dd453",
	"gg444",
	"gg554",
	"dd789"
];
var str=arr.toString();
str=str.replace(/(^|,)?dd.*?(,|$)/gm,'');
arr=str.split(',');
alert(arr);
Ответить с цитированием
  #5 (permalink)  
Старый 24.04.2017, 12:35
Профессор
Отправить личное сообщение для SV0L0CH Посмотреть профиль Найти все сообщения от SV0L0CH
 
Регистрация: 07.11.2010
Сообщений: 301

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

Последний раз редактировалось SV0L0CH, 24.04.2017 в 12:39.
Ответить с цитированием
  #6 (permalink)  
Старый 24.04.2017, 13:50
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,209

Сообщение от SV0L0CH
Вдруг он связывает несколько замыканий
А вдруг нет...
Порой это просто гвоздь и его просто нужно забить молотком.
Ответить с цитированием
  #7 (permalink)  
Старый 24.04.2017, 13:50
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

вариант без вспомогательного массива, за время 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;
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
фрактальный сыр x-yuri Оффтопик 76 23.11.2011 21:59
О фрилансе (Личный опыт) free Оффтопик 105 18.08.2011 17:02
Поюзайте хомячка Nanto Ваши сайты и скрипты 30 06.06.2011 22:16
неполучается сделать выбор всего, что в div'e shureg Общие вопросы Javascript 2 13.06.2010 14:36
есть ли стандартная функция вывода сожержимого массива что то вроди print_r в PHP??? mazovski Events/DOM/Window 4 20.08.2009 12:52