Почему при удалении удаляется первый элемент массива? А если написать через оператор switch case не работает break в последнем условии?

Подскажите пожалуйста, почему при вводе команды delete удаляется только первый элемент массива, а не тот который мне нужен? например я ввожу add Tom, add John, add Tim, в массив добавляются ["Tom", "John", "Tim"], но если ввиду delete John, удаляется Tom.

let arr = [];

for (let i = 0; i < Infinity; i++) {
    var command = prompt('Введите команду');
    var arrays = command.split(' ');

    var index = arrays[0];
    var name = arrays[1];

     if (index == 'add') {
         arr.push(name);
         console.log(arr);
     } else if (index == 'delete') {
        arr.splice(name, 1);
         console.log(arr);
     } else if (index === 'stop') {
         break;
     }
}
console.log(arr);

Ответы (1 шт):

Автор решения: Grundy

Как указано в справке .splice первым параметром указывается индекс элемента.

В коде в вопросе идет попытка передать сам элемент. Идет попытка привести значение к целому числу. Так как в элементе вообще не число, результатом приведения будет 0.

Все это приводит к вызову .splice(0,1) - что и является удалением одного элемента, начиная с индекса 0.

Для решения нужно сначала найти индекс элемента и затем использовать его.

Для поиска индекс есть метод .indexOf

var index = arr.indexOf(name);

if (index > -1) // если что-то нашли
    arr.splice(index, 1); // удалили по найденному индексу
→ Ссылка