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

6.4 KiB
Raw Blame History

title localeTitle
Drop it 算了吧

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

:checkered_flag:问题说明:

基本上,虽然第二个参数不正确,但您必须从作为第一个参数传递的数组左侧删除第一个元素。

相关链接

:speech_balloon:提示1

您可以使用您应该更熟悉的Array.prototype.shift()或过滤器来在几行代码中解决此问题。

现在尝试解决问题

:speech_balloon:提示2

Shift返回我们不需要的被删除的元素我们需要的只是剩下的修改过的数组。

现在尝试解决问题

:speech_balloon:提示3

如果你仍然无法弄清楚如何用shift来解决它那么尝试使用filter来解决它并检查过滤器是如何工作的如果你熟悉它那么你可以使用shift来制作代码。

现在尝试解决问题

扰流警报!

警告牌

提前解决!

:beginner:基本代码解决方案

function dropElements(arr, func) { 
  // drop them elements. 
  var times = arr.length; 
  for (var i = 0; i < times; i++) { 
    if (func(arr[0])) { 
      break; 
    } else { 
      arr.shift(); 
    } 
  } 
  return arr; 
 } 
 
 // test here 
 dropElements([1, 2, 3, 4], function(n) {return n >= 3;}) 

:rocket: 运行代码

代码说明:

  • 创建一个for循环来检查每个元素。
  • 然后检查给定的函数是否为true然后停止否则删除该元素。
  • 返回数组。

相关链接

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

function dropElements(arr, func) { 
  return arr.slice(arr.findIndex(func) >= 0 ? arr.findIndex(func): arr.length, arr.length); 
 } 
 
 // test here 
 dropElements([1, 2, 3, 4], function(n) {return n >= 3;}); 

:rocket: 运行代码

代码说明:

  • 使用ES6 findIndex()函数查找传递条件的元素的索引
  • 从找到的索引切割数组直到结束
  • 有一个边缘案例!如果没有满足任何元素的条件'findIndex'将返回-1 ,这会混淆slice()的输入。在这种情况下,使用简单的条件运算符返回false而不是-1 。和三元运算符(? :slight_smile:当条件为true时返回所需元素的索引,否则返回数组的长度,以便返回值为指示的空数组。

相关链接

:rotating_light:高级代码解决方案

function dropElements(arr, func) { 
  while(arr.length > 0 && !func(arr[0])) { 
    arr.shift(); 
  } 
  return arr; 
 } 
 
 // test here 
 dropElements([1, 2, 3, 4], function(n) {return n >= 3;}); 

:rocket: 运行代码

代码说明

  • 使用带有Array.prototype.shift()的while循环继续检查并删除数组的第一个元素直到函数返回true。它还确保数组首先不为空以避免无限循环。
  • 返回已过滤的数组。

相关链接

:clipboard:捐款说明:

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

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