Удаление с массива всего что начинается с ddd
JsonData.names здесь у меня хранятся такие данные:
["dd123", "dd322", "dd453", "gg444", "gg554"] Подскажите пожалуйста как с переменной удалить все данные которые начинаются с dd* |
|
Есть какое-то более красивое решение?
for(i = 0;i<jsonData.names.length;i++) { if (jsonData[i].name.substring(0,2) == 'dd') { jsonData.name.splice(i); } } |
Без цикла...
var arr=[ "dd123", "dd322", "dd453", "gg444", "gg554", "dd789" ]; var str=arr.toString(); str=str.replace(/(^|,)?dd.*?(,|$)/gm,''); arr=str.split(','); alert(arr); |
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); |
Цитата:
Порой это просто гвоздь и его просто нужно забить молотком. ;) |
вариант без вспомогательного массива, за время 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, время: 14:51. |