Функция массива с IndexOf() и splice()

У меня есть массив, заполненный предметами из холодильника. Я пытаюсь найти индекс определенных элементов, а затем соединить их из массива, а затем вернуть элемент и console.log оставшиеся элементы в холодильнике. Я понятия не имею, почему это не работает. Я пробовал несколько разных вариантов и пытался найти другие похожие ответы на этот вопрос. Любые советы или помощь очень ценятся.

fridge = ["milk", "cheese", "butter"];

function removeItemFromFridge(item) {
  
  if (item.indexOf()) {
    fridge.splice(item);
    return item;
  } else {
    return null;
  }
}
removeItemFromFridge("milk");
removeItemFromFridge("butter");

console.log(fridge);

person Nicole Roberts    schedule 19.01.2021    source источник
comment
if (item.indexOf()) {?? Разве это не должно быть if (fridge.indexOf(item)) {?? Это не решит эту проблему, есть другие проблемы.   -  person rahulpsd18    schedule 19.01.2021
comment
Вы можете использовать метод filter массива для удаления определенного элемента.   -  person Ihor Tkachuk    schedule 19.01.2021
comment
@IhorTkachuk, конечно, технически filter не удаляет элемент из массива, он создает новый массив.   -  person Wyck    schedule 19.01.2021
comment
@Wyck Но изменение внешней области действия - плохая практика.   -  person Ihor Tkachuk    schedule 19.01.2021


Ответы (2)


indexOf находит первый индекс, который соответствует заданному значению в массиве, если такого значения нет, он возвращает -1. для соединения вы указываете первый индекс, с которого вы хотите начать удаление, а во втором аргументе вы передаете номер элемента, который хотите удалить, начиная с заданного индекса в первом аргументе. Я думаю, вы хотите сделать это так

let fridge = ["milk", "cheese", "butter"];

function removeItemFromFridge(item) {
  const index = fridge.indexOf(item);
  
  if (index > -1 ) {
    fridge.splice(index, 1);
    return item;
  } else {
    return null;
  }
}
removeItemFromFridge("milk");
removeItemFromFridge("butter");

console.log(fridge);
person mss    schedule 19.01.2021
comment
Большое спасибо. Теперь я понимаю, что я делал неправильно, глядя на ваш ответ. Это тоже сработало. Очень признателен. - person Nicole Roberts; 19.01.2021

Если fridge — это значение, которое мы можем полностью заменить вместо изменения существующего массива, вместо этого вы можете использовать array.filter().

function removeItemFromFridge(item) {
  fridge = fridge.filter(v => v !== item)
}

В противном случае, если вы хотите сохранить тот же массив, вы можете найти индекс элемента и соединить его.

function removeItemFromFridge(item) {
  const index = fridge.indexOf(item);
  if (index !== -1) fridge.splice(index, 1)
}

Кроме того, выполнение return не требуется, поскольку ваш вызывающий объект не использует возвращаемое значение.

person Joseph    schedule 19.01.2021
comment
вы написали item.indexOf(item) , как это правильно, разве это не должно бытьfriger.indexOf(item)? - person mss; 19.01.2021
comment
Да должно быть так. Я просто вставил то, что у меня было в прошлый раз. У меня это было изначально, а затем я начал играть с ним и забыл изменить его обратно на холодильник.indexOf(item) - person Nicole Roberts; 19.01.2021
comment
Большое спасибо. Вы все очень помогли. - person Nicole Roberts; 19.01.2021