Как удалить из многомерного массива?
Здравствуйте. Есть вот такой 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, время: 04:25. |