Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.05.2021, 05:36
Аватар для nastya97core
Аспирант
Отправить личное сообщение для nastya97core Посмотреть профиль Найти все сообщения от nastya97core
 
Регистрация: 04.04.2020
Сообщений: 60

Как удалить из многомерного массива?
Здравствуйте. Есть вот такой 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. ПОЧЕМУ МОЙ КОД УДАЛЯЕТ БАНАН?
Ответить с цитированием
  #2 (permalink)  
Старый 10.05.2021, 09:19
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,743

Сообщение от 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)
Ответить с цитированием
  #3 (permalink)  
Старый 10.05.2021, 10:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105


<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>
Ответить с цитированием
  #4 (permalink)  
Старый 10.05.2021, 22:31
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,743

рони,
Конечно, для данной работы это может быть и все равно, но речь шла об удалении элемента. Удаление элемента и создание нового массива без этого элемента - совершенно разные операции.
А если бы где то перед удалением элемента было
let arr1 = arr;
?
Ответить с цитированием
  #5 (permalink)  
Старый 10.05.2021, 22:33
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

voraa,
угу - угу )))
Ответить с цитированием
  #6 (permalink)  
Старый 11.05.2021, 00:24
Аватар для nastya97core
Аспирант
Отправить личное сообщение для nastya97core Посмотреть профиль Найти все сообщения от nastya97core
 
Регистрация: 04.04.2020
Сообщений: 60

Сообщение от рони Посмотреть сообщение


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


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

Я же правильно мыслю?
Ответить с цитированием
  #7 (permalink)  
Старый 11.05.2021, 00:36
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

nastya97core,
возможно строка 5 лишняя.
Ответить с цитированием
  #8 (permalink)  
Старый 11.05.2021, 01:28
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,577

рони, пусть будет, для надёжности. Мало ли как эти функци там внутри работают.)
__________________
29375, 35
Ответить с цитированием
  #9 (permalink)  
Старый 11.05.2021, 10:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Aetae,
ок)))
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в JS вставить адрес картинки из массива АлексАн Общие вопросы Javascript 2 15.03.2021 13:49
Обход многомерного массива с задержкой после каждого цикла Walk Общие вопросы Javascript 2 14.08.2017 16:17
Как достать данные из JSON массива? Dimaz jQuery 15 27.11.2012 21:58
Как удалить элемент массива без нарушениея последовательности индэксов Tek Общие вопросы Javascript 1 12.10.2012 11:16
Как удалить элемент массива? velo Общие вопросы Javascript 2 05.02.2010 15:58