6.4 KiB
6.4 KiB
title | localeTitle |
---|---|
Drop it | 算了吧 |
如果卡住,请记得使用**Read-Search-Ask
** 。尝试配对程序并编写自己的代码
问题说明:
基本上,虽然第二个参数不正确,但您必须从作为第一个参数传递的数组左侧删除第一个元素。
相关链接
提示:1
您可以使用您应该更熟悉的Array.prototype.shift()
或过滤器来在几行代码中解决此问题。
现在尝试解决问题
提示:2
Shift返回我们不需要的被删除的元素,我们需要的只是剩下的修改过的数组。
现在尝试解决问题
提示:3
如果你仍然无法弄清楚如何用shift来解决它,那么尝试使用filter来解决它,并检查过滤器是如何工作的,如果你熟悉它,那么你可以使用shift来制作代码。
现在尝试解决问题
扰流警报!
提前解决!
基本代码解决方案
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;})
代码说明:
- 创建一个for循环来检查每个元素。
- 然后检查给定的函数是否为true然后停止,否则删除该元素。
- 返回数组。
相关链接
中级代码解决方案:
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;});
代码说明:
- 使用ES6
findIndex()
函数查找传递条件的元素的索引 - 从找到的索引切割数组直到结束
- 有一个边缘案例!如果没有满足任何元素的条件'findIndex'将返回
-1
,这会混淆slice()
的输入。在这种情况下,使用简单的条件运算符返回false
而不是-1
。和三元运算符(? 当条件为true
时返回所需元素的索引,否则返回数组的长度,以便返回值为指示的空数组。
相关链接
高级代码解决方案
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;});
代码说明
- 使用带有
Array.prototype.shift()
的while循环继续检查并删除数组的第一个元素,直到函数返回true。它还确保数组首先不为空以避免无限循环。 - 返回已过滤的数组。
相关链接
捐款说明:
- 请勿添加与任何现有解决方案类似的解决方案。如果您认为它**相似但更好** ,那么尝试合并(或替换)现有的类似解决方案。
- 添加解决方案的说明。
- 将解决方案分为以下类别之一 - 基本 , 中级和高级 。
- 如果您添加了任何**相关的主要内容,**请仅添加您的用户名。 ( 不要 删除任何现有的用户名 )