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

Удалить элемент из массива c помощью Jquery?

Приветствую!

Помогите разобраться со следующей задачей.
Есть список игроков, которые добавляются при помощи autocomlete. При выборе игрока он заносится в игровую таблицу. Когда игрок занесен в таблицу, он уже не выводится в списке autocomplete. Случается, что выбрали не того игрока, тогда его удаляют и вносят нового, а удаленный опять появляется в списке выбора.

У меня загвоздка с удалением игрока из списка. Скрыл различные попытки удаления.

Массив с игроками выглядит так: [14: "14", 57: "57", 59: "59"].

Мой код:
$(document).on('click', '.item-remove', function() {
		var removeItem = $(this).parent().data('playerid');
	
		/*$(cache_com).each(function(key, value) {
			if (value != removeItem ) {
				return key;
			}
		});*/
	
		/*cache_com.splice(0, 1); */

		/*$(cache_com).pull(removeItem);*/
		
               /* cache_com = $.grep(cache_com, function(key,value) {
		return key != removeItem;
		return ({key: value});
		});*/

		/*cache_com.pop(14);*/
			 
		/*cache_com = $.grep(cache_com, function (value, key) {
		return key != removeItem 
		});*/

	});

var cache_com = [];
	function createAutocomplete(els, top, left) {
			els.autocomplete({
			source: function(request, response) {
				$.ajax({
					type: "POST",
					url: "/loadfields/player/",
					data: request,
					dataType: "json",
					success: function(data) {
						
						var input = $(els);
						
						$('.b-staff-dropdown.nobody').hide();

						if (data == null || data.length == 0) {
							data = {
								value: 0,
								label: "Ничего не найдено",
							};
							$('.b-staff-dropdown.founded').hide();
							$('.b-staff-dropdown.nobody').css("top", function(index) {
								return index + totalTop;
							});
							$('.b-staff-dropdown.nobody').css("left", function(index) {
								return index + totalLeft;
							});
							$('.b-staff-dropdown.nobody').show();
						} else {
							if (person.value in cache_com) {
									
							} else {
									users_arr.push('\<li class="item">\n\
								<div class="image-wrapper">\n\
									<div class="usericon usericon-alter" style="background-color: #C7C9FA;">Г.С.\n\
										<svg class="svg-frame" x="0px" y="0px" width="36px" height="36px" viewBox="0 0 50 50" enable-background="new 0 0 50 50" xml:space="preserve">\n\
										<path fill="#FFFFFF" d="M-1,-1v52h52V-1H-1z M25,49C4,49,1,44.997,1,25C1,5,4,1,25,1c20.996,0,24,4,24,24S46,49,25,49z"></path>\n\
										</svg>\n\
									</div>\n\
								</div>\n\
								<div class="info">\n\
									<span data-addtype="' + $(els).data('name') + '" data-id="' + $(els).data('id') + '" data-class="' + InputDateClass + '" data-id="' + InputDateId + '" data-name="' + $(els).data('name') + '" class="name">' + person.label + '</span>\n\
									<span class="post small c-color-gray">Игрок</span>\n\
									<span style="display:none;" class="value">' + person.value + '</span>\n\
								</div>\n\
								</li>');
						}
							});

							var totalTop = +top + 20;
							var totalLeft = +left;

							$('.b-staff-dropdown.founded').html(users_arr);
							$('.b-staff-dropdown.founded').css("top", function(index) {
								return index + totalTop;
							});
							$('.b-staff-dropdown.founded').css("left", function(index) {
								return index + totalLeft;
							});
							$('.b-staff-dropdown.founded').show();
							$('ul.b-staff-dropdown.founded').on('click', '.item', function() {
								var playerid = $(this).find('.value').text();
								var playername = $(this).find('.name').text();
								
								cache_com[playerid] = playerid;
addPlayertoinput(input, playerid, playername);
							
							});

						}
					},
				});
			},
			minLength: 1,
			select: function(event, ui) {

			}
		});
	}
  • Вопрос задан
  • 2943 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@gistol Автор вопроса
Решил следующим образом:

removeOne(removeItem, cache_com);

function removeOne(value, array) {
array.some(function(_value, index, _array) {
if (_value == value) {
_array.splice(index, 1);
return true;
}
}, array);
console.log(array);
}

Соответственно пришлось доработать два момента.
Добавляем в массив просто id игрока:
cache_com.push(playerid);

Проходимся по массиву:
if ($.inArray('' + person.value + '', cache_com) > -1) { }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Gregpopov
Full stack web developer
var arr=[1,2,3,4,5];
var value=4;

arr.splice( $.inArray(value, arr), 1 );

теперь в arr у нас будет 1,2,3,5

Копипаст отсюда: php-mysql-life.blogspot.com/2012/06/jquery.html?m=1

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

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

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