Почему при удалении удаляется первый элемент массива? А если написать через оператор 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 шт):
Как указано в справке .splice первым параметром указывается индекс элемента.
В коде в вопросе идет попытка передать сам элемент. Идет попытка привести значение к целому числу. Так как в элементе вообще не число, результатом приведения будет 0.
Все это приводит к вызову .splice(0,1) - что и является удалением одного элемента, начиная с индекса 0.
Для решения нужно сначала найти индекс элемента и затем использовать его.
Для поиска индекс есть метод .indexOf
var index = arr.indexOf(name);
if (index > -1) // если что-то нашли
arr.splice(index, 1); // удалили по найденному индексу