Javascript 没有indexOf有没有办法做到这一点?

Javascript 没有indexOf有没有办法做到这一点?,javascript,arrays,function,indexing,Javascript,Arrays,Function,Indexing,我跟你有麻烦 任务6:因为公司想要在他们的产品中添加越来越多的口味 他们已经意识到,他们需要基于 风味名称,而不是随意删除第一个或第二个 最后的味道。您的任务是按味道名称获取索引,然后删除 阵列中的单一味道 使用下面的removeFlavorByName函数执行以下操作: 1. Receive an array 2. Receive a flavor as a string 3. Remove the received flavor from the received array 4. Retu

我跟你有麻烦

任务6:因为公司想要在他们的产品中添加越来越多的口味 他们已经意识到,他们需要基于 风味名称,而不是随意删除第一个或第二个 最后的味道。您的任务是按味道名称获取索引,然后删除 阵列中的单一味道

使用下面的removeFlavorByName函数执行以下操作:

1. Receive an array
2. Receive a flavor as a string
3. Remove the received flavor from the received array
4. Return the resulting array that now contains one less flavor
例如:运行
removeFlavorByName(originalFlavors,“Rocky Road”)
将返回一个长度为30的数组 因为
多石道路
将被移除

提示:您可以为此使用
.splice()

这是我的代码:

function removeFlavorByName(array, str){
  if (array.includes(str)) {
    let string = array.indexOf(str);
    array.splice(string, 1);
  }

  return array
}
谁能告诉我不使用indexOf怎么做?我相信Lamda school使用的测试软件希望我们只使用基本的东西,因为这无法通过他们的npm测试,即使它工作正常。

使用过滤器最简单的方法 如果使用
.splice
,则必须决定在何处进行拼接:为此,您需要知道
.indexOf
的结果,无论您是否实际使用
.indexOf
功能

但是,如果允许您在不使用
.splice
的情况下执行此操作,则最简单的方法是使用
.filter
高阶函数

它作用于一个数组,并传入一个函数,该函数决定每个元素是否应该保留该元素

function removeFlavorByName(array, str){
    return array.filter(item=>item!==str)
}
其工作原理如下:

返回一个新数组,由旧数组构造,如下所示: 获取旧数组的元素,并使用以下函数对其进行过滤: 如果元素不等于str, 将其包含在新数组中,否则不要包含它


Array.prototype.indexOf是一个旧的内置函数。这是最简单的拼接方式。Array.prototype.splice函数需要一个索引,我相信它是专门为使用.indexOf而构建的

您的任务是按风格名称获取索引,并从数组中删除该单一风格


第一部分主要描述indexOf的工作原理。因此,除非他们明确告诉您不要使用indexOf,否则您可能会过度考虑该部分。

您可以使用array.filter,或者最基本的方法是创建一个新数组而不包含
str
,我个人不会执行包含步骤。在进行拼接之前,我只需检查-1。我猜你在学习循环,他们想让你循环???
indexOf
是基本的东西-我怀疑他们想让你使用
splice
,而不是
indexOf
。你能给我们看一下失败测试的结果/输出吗?您的代码看起来非常好(除了一些可能的优化,以及在处理
NaN
时出现的边缘情况)。说明中特别提到“按味道名称获取索引”。他们会禁止使用
indexOf()
,这是没有意义的。我认为“提示”表明,这不是他们应该如何解决的问题。他们的说明说,从接收的数组中删除接收的味道,这意味着在适当的位置修改数组
filter()
返回一个新数组。啊,我现在在更新的问题中看到了这一点。8-)