Удаление элемента из массива по значению в JavaScript дает непредсказуемые результаты

#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%