Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как удалить из многомерного массива? (https://javascript.ru/forum/misc/82454-kak-udalit-iz-mnogomernogo-massiva.html)

nastya97core 10.05.2021 05:36

Как удалить из многомерного массива?
 
Здравствуйте. Есть вот такой 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. ПОЧЕМУ МОЙ КОД УДАЛЯЕТ БАНАН?:( :( :(

voraa 10.05.2021 09:19

Цитата:

Сообщение от nastya97core
2. ПОЧЕМУ МОЙ КОД УДАЛЯЕТ БАНАН?

arr.splice(i, 1);

Цитата:

Сообщение от nastya97core
хотя мне кажется, что это можно сделать проще без переборов

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)

рони 10.05.2021 10:35

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

voraa 10.05.2021 22:31

рони,
Конечно, для данной работы это может быть и все равно, но речь шла об удалении элемента. Удаление элемента и создание нового массива без этого элемента - совершенно разные операции.
А если бы где то перед удалением элемента было
let arr1 = arr;
?

рони 10.05.2021 22:33

voraa,
угу - угу )))

nastya97core 11.05.2021 00:24

Цитата:

Сообщение от рони (Сообщение 536353)
:)

:D :D :D

Я это хотела сделать, чтобы удалять из куки объекты.
Этот код работает. Просто хотела спросить, всё ли верно?
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("Удалено")
}


Смысл такой:
Передаю в функцию массив с удаляемым массивом
Получаю куки,
Получаю (с вашей помощью) новый массив,
Удаляю все куки,
Записываю в куки новый массив

Я же правильно мыслю?

рони 11.05.2021 00:36

nastya97core,
возможно строка 5 лишняя.

Aetae 11.05.2021 01:28

рони, пусть будет, для надёжности. Мало ли как эти функци там внутри работают.)

рони 11.05.2021 10:42

Aetae,
ок)))


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