没有 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 有没有办法做到这一点?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在没有 CASE 表达式的情况下做到这一点?

使用太多内存来减少图像尺寸......有没有办法使用更少的内存来做到这一点?

我的对象的 ArrayList,indexOf 问题

我想用 CMake 生成和编译 Visual Studio 项目我需要从构建中排除单元测试文件。有没有办法做到这一点?

有啥办法可以做到这一点?相对路径使用

有没有办法可以在Django中的同一个模板中渲染多个视图?如果有最佳实践可以做到这一点?提前致谢