带有 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);

解决方法

如果 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,因为您的调用者没有使用返回值。

,

indexOf 查找与数组中给定值匹配的第一个索引,如果不存在这样的值,则返回 -1。对于 splice,您指定要从哪里开始删除的第一个索引,并在第二个参数中传递要从第一个参数中的给定索引开始删除的元素数。 我想你想这样做

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);