#javascript #arrays #splice
#javascript #массивы #сращивание
Вопрос:
У меня есть этот код для удаления элемента из массива по значению в JS…
function remove_item(index){
//log out selected array
console.log('before >> ' selected); //
//log out item that has been requested to be removed
console.log('removing >> ' index);
//remove item from array
selected.splice( $.inArray(index,selected) ,1 );
//log out selected array (should be without the item that was removed
console.log('after >> ' selected);
//reload graph
initialize();
}
Вот как выглядит мой массив…
selected = [9, 3, 6]
Если я вызываю remove_item(3)
это то, что выходит из системы…
before >> 9,3,6
removing >> 3
after >> 9,3
После должно быть 9,6
не 9,3
Я полностью в тупике по этому поводу, поскольку это иногда работает, а иногда нет…
Например, я только что попробовал remove_item(10)
, и это сработало…
before >> 1,2,10
removing >> 10
after >> 1,2
Я уверен, что это как-то связано с этой строкой:
selected.splice( $.inArray(index,selected) ,1 );
Любая помощь очень ценится.
Ответ №1:
Если это непоследовательно, иногда параметром index
является строка, а иногда и число.
$.inArray('3', arr)
вернет -1
.
$.inArray(3, arr)
вернет 1
.
[9, 3, 6].splice(-1, 1); // removes last item from the array
Смотрите документы splice.
Вы можете убедиться, что это всегда число, делая это:
//remove item from array
selected.splice( $.inArray(Number(index),selected) ,1 );
… или …
function remove_item(index){
index = Number(index);
Комментарии:
1. Это решило проблему — в итоге я пошел немного другим путем восстановления массива путем перебора выбранных элементов, который, кажется, работает намного лучше. Но это решило вопрос. Принято. Спасибо!
Ответ №2:
Я протестировал ваш код, и он работает так, как задумано.
Я думаю, вам нужно еще раз проверить свой входной массив. Это действительно [9,3,6] или вы ожидаете, что это будет так?
Комментарии:
1. Да — выход из системы составляет 9,3,6 100%