Задать вопрос
@interes70

Как удалить элемент из ассоциативного массива в nodejs?

Добрый день.
Краткая суть. Хочу сделать на сайте блок, с пользователями, кто в данный момент на сайте.
Реализация. Отправляю по сокетам данные о пользователе на сервер. Там набию все все в один один массив и уже обновляю у всех пользователей.
Создание массива. "Пропущены проверки на повторение"
var arr_online_user = [];
	arr_online_user["user"] = new Array();

	    arr_online_user["user"] = new Object();
			arr_online_user["user"].userid = userid;
			arr_online_user["user"].userip = userip;
			arr_online_user["user"].avatar = avatar;
			arr_online_user["user"].name = name;
onlineuser = arr_online_user["user"];
checkArrGlobal = checkArrGlobal.concat(onlineuser);

Содержание массива.
[{"userid":"#","userip":"111.11.111.111","avatar":"img/incognito.png","name":"Не авторизован"},{"userid":"3054895","userip":"222.222.22.222","avatar":"public/images/avatars/c0/c93a5b.jpg","name":"Haruhi Suzumiya"},{"userid":"3054896","userip":"333.222.22.222","avatar":"public/images/avatars/c0/c0e9efc389f.jpg","name":"Haruhi"},{"userid":"305","userip":"222.333.22.222","avatar":"public/images/avatars/c0/c0e0fa8eefc3.jpg","name":"Suzumiya"},{"userid":"895","userip":"222.222.333.222","avatar":"public/images/avatars/c0/c0b6055.jpg","name":"IUGIUIh"}]

При удаление(закрытие вкладки) так же приходят данные серверу с данными пользователя. Если пользователь был авторизован то я пытаюсь найти и удалить по userid , если это был был гость то по userip.
Поиск элемента который нужно удалить(реализаци только по ip).
for (var j = 0; j < checkArrGlobal.length; j++) {
				if(checkArrGlobal[j].userip.indexOf(data.userip) == -1){
					console.log('>>>> Не тот '+data.userip+' == '+JSON.stringify(checkArrGlobal[j].userip));
				}else{
					//console.log('>>>> Найден пользователь '+data.userip+' ='+j+'= '+JSON.stringify(checkArrGlobal[j].userip));
					console.log('>>>> По ключу ='+j+'= содержит '+JSON.stringify(checkArrGlobal[j]));
					delete checkArrGlobal[j];
					onlineuser_json = JSON.stringify(checkArrGlobal);
					break;
					
				}
			}

Содержание onlineuser_json после удаления.
Пользовательне найдей  в массиве по userip 111.11.111.111
onlineuser_json содержит [null,{"userid":"29040","userip":"111.11.111.111","avatar":"2d3e71e27e3ea972cf9e562.jpg","name":"ski"},{"userid":"4486546","userip":"222.22.22.22","avatar":"4f1e3bd549c4d45ad3.jpg","name":"Olden"}]

Как видете первый элемент масиива null, как правильно удалить данные из массива что бы небыло такого. Из-за null nodejs выдает ошибку и сам модуль на сайте перестает работать.
  • Вопрос задан
  • 575 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@rustler2000
погромист сикраш
Если массив - то ```checkArrGlobal.splice(j, 1)```
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Krasnodar_etc
@Krasnodar_etc
fundraiseup
Смотреть тут . Там же объяснение, почему так.
Ответ написан
Комментировать
Xuxicheta
@Xuxicheta
инженер
В js нет ассоциативных массивов. Их заменяют объекты. Удалить свойство объекта - оператор delete
В js есть просто массивы. Применение delete к элементу массива удалит его, но не изменит свойство length массива.
А размер обычного массива равен свойству length, при его выводе недостающие элементы будут присутствовать с пустым значением.
ar=[];
ar.length=5;
console.log(ar); // [ , , , ,  ]
console.log("0" in ar); // false

splice следит за тем чтобы длина массива была актуальной его содержимому и соблюдает порядок индексов.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы