没有 indexOf 有没有办法做到这一点?
Posted
技术标签:
【中文标题】没有 indexOf 有没有办法做到这一点?【英文标题】:Is there any way to do this without indexOf? 【发布时间】:2021-07-09 22:05:49 【问题描述】:我遇到了麻烦
任务 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 的数组 因为Rocky Road
会被删除。提示:您可以为此使用
.splice()
这是我的代码:
function removeFlavorByName(array, str)
if (array.includes(str))
let string = array.indexOf(str);
array.splice(string, 1);
return array
谁能告诉我如何在不使用 indexOf 的情况下做到这一点?我相信 Lamda 学校正在使用的测试软件希望我们只使用基本的东西,因为即使它有效,它也无法通过他们的 npm 测试。
【问题讨论】:
你可以使用 array.filter 或者最基本的方法是创建一个不包含str
的新数组
就我个人而言,我不会执行包含步骤。在进行拼接之前,我只会检查 -1。我猜你是在学习循环,他们想让你循环???
indexOf
是基本的东西——我怀疑他们会希望你使用splice
而不是indexOf
。你能告诉我们失败测试的测试结果/输出吗?您的代码看起来非常好(除了一些优化潜力,以及处理NaN
的边缘情况)。
说明中特别提到“按风味名称获取索引”。他们禁止使用indexOf()
是没有意义的。
【参考方案1】:
使用 FILTER 最简单的方法
如果你使用.splice
,那么你必须决定在哪里拼接:要做到这一点,你需要知道.indexOf
的结果,无论你是否实际使用.indexOf
函数。
但是,如果允许您在没有 .splice
的情况下执行此操作,那么最简单的方法是使用 .filter
高阶函数。
这作用于一个数组,并输入一个函数,该函数决定每个元素是否应该保留该元素。
function removeFlavorByName(array, str)
return array.filter(item=>item!==str)
其工作原理如下:
返回一个新数组,从旧数组构造如下: 获取旧数组的元素,并使用以下函数过滤它们: 如果元素不等于 str, 将其包含在新数组中,否则不包含它
【讨论】:
我认为“提示”表明这不是他们期望的解决方法。 他们的指令说 Remove the received flavor from the received array 这意味着修改数组。filter()
返回一个新数组。
啊,我现在在更新的问题中看到了这一点。 8-)【参考方案2】:
Array.prototype.indexOf 是一个旧的内置函数。这是使用 splice 执行此操作的最简单的方法。 Array.prototype.splice 函数需要一个索引,我相信它是专门为使用 .indexOf 而构建的。
您的任务是按风味名称获取索引,并从数组中删除该单一风味。
第一部分主要描述了 indexOf 的工作原理。所以除非他们明确告诉你不要使用 indexOf,否则你可能会想太多。
【讨论】:
以上是关于没有 indexOf 有没有办法做到这一点?的主要内容,如果未能解决你的问题,请参考以下文章
使用太多内存来减少图像尺寸......有没有办法使用更少的内存来做到这一点?