6.5 KiB
title, localeTitle
| 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将其从arrdelete。
-
-
在嵌套循环之外:使用
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()返回已过滤的数组。
相关链接
捐款说明:
请勿添加与任何现有解决方案类似的解决方案。如果您认为它**相似但更好** ,那么尝试合并(或替换)现有的类似解决方案。- 添加解决方案的说明。
- 将解决方案分为以下类别之一 - 基本 , 中级和高级 。

- 如果您添加了任何**相关的主要内容,**请仅添加您的用户名。 (
不要 删除任何现有的用户名 )


