6.5 KiB
title | localeTitle |
---|---|
Seek and Destroy | 寻找和摧毁 |
如果卡住,请记得使用**Read-Search-Ask
** 。尝试配对程序并编写自己的代码
问题说明:
这个问题有点棘手,因为你必须熟悉Arguments,因为你必须使用两个**或更多,**但在脚本上你只看到两个。很多人用三个参数对这个程序进行硬编码。您将从第一个参数中删除与任何其他参数相同的任何数字。
相关链接
提示:1
您需要使用arguments
,就好像它是一个常规数组。最好的方法是将其转换为一个。
现在尝试解决问题
提示:2
您需要过滤,这也意味着您需要创建一个回调函数。您可以使用各种方法,如: indexOf()
, includes()
。如果您需要其他方法, reduce()
也可能有用;继续阅读那些文档!
现在尝试解决问题
提示:3
要将arguments
转换为数组,请使用以下代码var args = Array.prototype.slice.call(arguments);
现在尝试解决问题
扰流警报!
提前解决!
基本代码解决方案
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);
}
代码说明:
-
使用
Array.prototype.slice.call()
创建一个arguments
数组,并将其存储在变量args
。我们将用它来检查arr
。 -
启动一个基本的
for
循环来迭代arr
。在另一个内部嵌套另一个for
循环,将整数变量j
和arr更改为args。第二个循环将遍历args
。-
在第二个循环中创建一个
if
语句,严格检查===
arr[i]
的当前val等于args[j]
。 -
如果两个数组中当前索引的_值_相等,请使用
delete
将其从arr
delete
。
-
-
在嵌套循环之外:使用
Boolean
对象返回修改后的数组,作为delete
运算符创建的任何null
的过滤器。
相关链接
-
参数
- Array.filter()
- 删除
- 布尔
中级代码解决方案:
function destroyer(arr) {
var args = Array.from(arguments).slice(1);
return arr.filter(function(val) {
return !args.includes(val);
});
}
代码说明:
-
声明一个名为
args
的变量,并将它设置为等于一个新的Array
对象from()
传递给函数的arguments
。在相同或下一行,从第二个索引1开始对args
使用slice()
方法。这将用于过滤的参数分隔为它们自己的args
数组。 -
返回已过滤的数组,使用回调函数中的
includes()
来检查val
是否_不在_args
;返回true
以保留原始数组中的值,或返回false
以删除它。
相关链接
高级代码解决方案
const destroyer = (arr, ...args) => arr.filter(i => !args.includes(i));
代码说明:
- 使用ES6语法的代码使用箭头函数声明函数。
- 使用spread运算符检索参数。
- 使用
includes()
返回已过滤的数组。
相关链接
捐款说明:
- 请勿添加与任何现有解决方案类似的解决方案。如果您认为它**相似但更好** ,那么尝试合并(或替换)现有的类似解决方案。
- 添加解决方案的说明。
- 将解决方案分为以下类别之一 - 基本 , 中级和高级 。
- 如果您添加了任何**相关的主要内容,**请仅添加您的用户名。 ( 不要 删除任何现有的用户名 )