Как удалить из многомерного массива?
Здравствуйте. Есть вот такой json массив:
[ ["Orange","medium"], ["Orange","big"], ["Apple","big"], ["Banane",false], ["Apple","big"], ] Мне нужно удалить из массива нужный объект. Даже если в массиве несколько раз повторяется данный объект - удалить всё равно один раз. Я попыталась сама и хотела уже сказать, что мой вариант работает (хоть он мне и не нравится), но мой "вариант" ведёт себя крайне странно: let del = ["Apple", "big"]; let arr = JSON.parse('[["Orange","medium"],["Orange","big"],["Apple","big"],["Banane",false],["Apple","big"]]') for (var i = 0, count = arr.length; i < count; i++) { if(arr[i][0] === del[0] && arr[i][1] === del[1]){ console.log("ПОДОШЛО"); arr.splice(i, i); break; } else { console.log("НЕ ПОДОШЛО"); } } Я подумала, что это делается через перебор массива, хотя мне кажется, что это можно сделать проще без переборов. Но меня смутило поведение данного кода: кроме Apple big удаляется ещё и Banane false. Почему - мне не понятно... У меня 2 вопроса: 1. как правильно удалить ненужный объект из массива? 2. ПОЧЕМУ МОЙ КОД УДАЛЯЕТ БАНАН?:( :( :( |
Цитата:
Цитата:
let del = ["Apple", "big"]; let arr = JSON.parse('[["Orange","medium"],["Orange","big"],["Apple","big"],["Banane",false],["Apple","big"]]') let id = arr.findIndex (x => x[0] === del[0] && x[1] === del[1]) if (id >= 0 ) arr.splice(id, 1); console.log(arr) |
:)
<script> let del = ["Apple", "big"]; let arr = JSON.parse('[["Orange","medium"],["Orange","big"],["Apple","big"],["Banane",false],["Apple","big"]]') let b; arr = arr.filter(a => !(!b && (b = JSON.stringify(a) === JSON.stringify(del)))) document.write(JSON.stringify(arr)) </script> |
рони,
Конечно, для данной работы это может быть и все равно, но речь шла об удалении элемента. Удаление элемента и создание нового массива без этого элемента - совершенно разные операции. А если бы где то перед удалением элемента было let arr1 = arr; ? |
voraa,
угу - угу ))) |
Цитата:
Я это хотела сделать, чтобы удалять из куки объекты. Этот код работает. Просто хотела спросить, всё ли верно? function delFromCart(array) { let arr = JSON.parse(getCookie('cart')); let b; arr = arr.filter(a => !(!b && (b = JSON.stringify(a) === JSON.stringify(array)))); deleteCookie('cart'); setCookie('cart', JSON.stringify(arr)); console.log("Удалено") } Смысл такой: Передаю в функцию массив с удаляемым массивом Получаю куки, Получаю (с вашей помощью) новый массив, Удаляю все куки, Записываю в куки новый массив Я же правильно мыслю? |
nastya97core,
возможно строка 5 лишняя. |
рони, пусть будет, для надёжности. Мало ли как эти функци там внутри работают.)
|
Aetae,
ок))) |
Часовой пояс GMT +3, время: 07:46. |