freeCodeCamp/guide/chinese/certifications/javascript-algorithms-and-d.../intermediate-algorithm-scri.../seek-and-destroy/index.md

6.2 KiB
Raw Blame History

title localeTitle
Seek and Destroy 寻找和摧毁

:triangular_flag_on_post:如果卡住,请记得使用**Read-Search-Ask** 。尝试配对程序:busts_in_silhouette:并编写自己的代码:pencil:

:checkered_flag:问题说明:

这个问题有点棘手因为你必须熟悉Arguments因为你必须使用两个**或更多,**但在脚本上你只看到两个。很多人用三个参数对这个程序进行硬编码。您将从第一个参数中删除与任何其他参数相同的任何数字。

相关链接

:speech_balloon:提示1

您需要使用arguments ,就好像它是一个常规数组。最好的方法是将其转换为一个。

现在尝试解决问题

:speech_balloon:提示2

您需要过滤,这也意味着您需要创建一个回调函数。您可以使用各种方法,如: indexOf() includes() 。如果您需要其他方法, reduce()也可能有用;继续阅读那些文档!

现在尝试解决问题

:speech_balloon:提示3

要将arguments转换为数组,请使用以下代码var args = Array.prototype.slice.call(arguments);

现在尝试解决问题

扰流警报!

警告牌

提前解决!

:beginner:基本代码解决方案

function destroyer(arr) { 
  var args = Array.prototype.slice.call(arguments); 
 
  for (var i = 0; i < arr.length; i++) { 
    for (var j = 0; j < args.length; j++) { 
      if (arr[i] === args[j]) { 
        delete arr[i]; 
      } 
    } 
  } 
  return arr.filter(Boolean); 
 } 

代码说明:

  1. 使用Array.prototype.slice.call()创建一个arguments数组,并将其存储在变量args 。我们将用它来检查arr

  2. 启动一个基本的for循环来迭代arr 。在另一个内部嵌套另一个for循环,将整数变量j和arr更改为args。第二个循环将遍历args

    • 在第二个循环中创建一个if语句,严格检查=== arr[i]的当前val等于args[j]

    • 如果两个数组中当前索引的_值_相等请使用delete将其从arr delete

  3. 在嵌套循环之外:使用Boolean对象返回修改后的数组,作为delete运算符创建的任何null的过滤器。

相关链接

:sunflower:中级代码解决方案:

function destroyer(arr) { 
  var args = Array.from(arguments).slice(1); 
  return arr.filter(function(val) { 
    return !args.includes(val); 
  }); 
 } 

代码说明:

  1. 声明一个名为args的变量,并将它设置为等于一个新的Array对象from()传递给函数的arguments 。在相同或下一行从第二个索引1开始对args使用slice()方法。这将用于过滤的参数分隔为它们自己的args数组。

  2. 返回已过滤的数组,使用回调函数中的includes()来检查val是否_不在_ args ;返回true以保留原始数组中的值,或返回false以删除它。

相关链接

高级代码解决方案

const destroyer = (arr, ...args) => arr.filter(i => !args.includes(i)); 

代码说明:

  • 使用ES6语法的代码使用箭头函数声明函数。
  • 使用spread运算符检索参数。
  • 使用includes()返回已过滤的数组。

相关链接

:clipboard:捐款说明:

  • :warning: 请勿添加与任何现有解决方案类似的解决方案。如果您认为它**相似但更好** ,那么尝试合并(或替换)现有的类似解决方案。
  • 添加解决方案的说明。
  • 将解决方案分为以下类别之一 - 基本 中级高级:traffic_light:
  • 如果您添加了任何**相关的主要内容,**请仅添加您的用户名。 :warning: 不要 删除任何现有的用户名

看到:point_right: Wiki Challenge Solution Template供参考。