金克斯的迫击炮!

实现一个摧毁(destroyer)函数,第一个参数是待摧毁的数组,其余的参数是待摧毁的值

函数中的有隐式的不确定个数的参数,而我们在函数中将会用到它,很显然,这需要我们在 arguments 上做文章了。我们来看看MDN是怎么解释 arguments 的:

arguments 是一个类数组对象。代表传给一个function的参数列表。

很显然,既然是类数组对象,说明它不是真正的数组,没有数组所具有的属性和方法(除了 length 属性)。为了便于我们接下来的运算,我们需要把arr后面的待摧毁的所有参数放进一个数组:

var args = [];
for(var i = 1; i < arguments.length; i++){
args.push(arguments[i]);
}

拿到了待摧毁的项构成的数组,接下来就是用 filter() 方法实现的简单的去重操作了。

arr.filter(function(item,index,array){
return args.indexOf(item) < 0;
});

因为 filter() 不会改变原始数组,所以声明一个变量接收上一步的返回结果,最后整个函数返回这个变量,问题解决啦!

解法

function destroyer(arr) {
// Remove all the values
var args = [];
for(var i = 1; i < arguments.length; i++){
args.push(arguments[i]);
}
var temp = arr.filter(function(item,index,array){
return args.indexOf(item) < 0;
});
return temp;
}

测试

destroyer([1, 2, 3, 1, 2, 3], 2, 3) 应该返回 [1, 1] .

destroyer([1, 2, 3, 5, 1, 2, 3], 2, 3) 应该返回 [1, 5, 1] .

destroyer([3, 5, 1, 2, 2], 2, 3, 5) 应该返回 [1] .

destroyer([2, 3, 2, 3], 2, 3) 应该返回 [] .

destroyer(["tree", "hamburger", 53], "tree", 53) 应该返回 ["hamburger"] .

 

关于javascript中arguments的一个很好的例子的更多相关文章

  1. javascript 中 arguments.callee属性

    javascript 中 arguments.callee属性 可以在函数内部,指向的是这个函数(或者叫做“类”)本身. 相当于PHP 中的 self 关键字. The arguments.calle ...

  2. JavaScript中随机打乱一个数组

    JavaScript中随机打乱一个数组 function shuffle(arr) { let i = arr.length; while (i) { let j = Math.floor(Math. ...

  3. javascript中怎么让一个页面执行多个window.onload?

    我们都知道在javascript中window.onload 只能有一个如果有多个的话后面的会覆盖前面的,今天我们来看看怎么让一个页面执行多个window.onload <script type ...

  4. javascript 中arguments.callee 调用自身

    一.Arguments该对象代表正在执行的函数和调用他的函数的参数.[function.]arguments[n]参数function :选项.当前正在执行的 Function 对象的名字.n :选项 ...

  5. 【JavaScript】浅析JavaScript中arguments对象的使用

    arguments对象不能显式创建,arguments对象只有函数开始时才可用.函数的 arguments 对象并不是一个数组,访问单个参数的方式与访问数组元素的方式相同.索引 n 实际上是 argu ...

  6. JavaScript中的this -- 好像很有道理版

    函数调用 首先需要从函数的调用开始讲起. JS(ES5)里面有三种函数调用形式: func(p1, p2) obj.child.method(p1, p2) func.call(context, p1 ...

  7. javascript中arguments的应用——不定项传参求和

    <script type="text/javascript"> window.onload=function(){ function sum(){ var result ...

  8. JavaScript 中 如何判断一个元素是否在一个数组中

    <script type="text/javascript"> var arrList=['12','qw','q','v','d','t']; console.log ...

  9. JavaScript中,返回上一个页面时,如何保证上一个页面的不刷新?

    history.back()和history.go(-1)都可以实现返回上一页并不刷新.History 对象包含用户(在浏览器窗口中)访问过的 URL. history.back() 等同于在浏览器点 ...

随机推荐

  1. 通过Long类型的出生日期算年龄

    package com.utils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.u ...

  2. cxgrid 非编辑状态下复制当前列的值 真折腾人

    1.自带的CTRL +C 只能复制整行,不知是不是版本问题. 2.有分组这个代码就不行了 s:= G1DBView.DataController.Values[G1DBView.Controller. ...

  3. 针对多条件查询,应对 url 无用 null 值现象处理

    多条件查询 应对 url 无用 null 值现象 处理例如:http://xxoo.b2b.com/orders?city_id=5&repertory_id=7&area_id=39 ...

  4. flask、tornado、BaseHTTPServer性能简单对比

    最近写了一个web应用,分别用flask.tornado.BaseHTTPServer都实现了一次,顺便就对比了一下三者的性能,本结果仅对本次测试负责(这句话很内涵,值得推广). 测试工具用了ab,时 ...

  5. CH 6201 走廊泼水节题解

    题目链接:CH6201 当时在海亮考试的第一题: 心得:其实一个算法是要真正理解这个思路和过程,而并不是单单知道它是用来写什么题的: 思路:n个节点有n-1条边,把这n-1条边按照权值从小到大排序,有 ...

  6. topcoder srm 615 div1

    problem1 link 对于数字$x$,检验每个满足$x=y*2^{t}$的$y$能否变成$x$即可. problem2 link 如果起点到终点有一条长度为$L$的路径,那么就存在长度为$L+k ...

  7. HDU 2665 Kth number(主席树静态区间第K大)题解

    题意:问你区间第k大是谁 思路:主席树就是可持久化线段树,他是由多个历史版本的权值线段树(不是普通线段树)组成的. 具体可以看q学姐的B站视频 代码: #include<cmath> #i ...

  8. error LNK1169 找到一个或多个多重定义的符号的解决方法

    问题描述如下: 有 三个源文件,A.h.B.cpp.C.cpp. A.h是头文件,其中声明了三个变量a1.a2. a3. B.cpp是A.h中所声明的类的实现源代码,C.cpp是主程序文件.B.cpp ...

  9. C#File类常用文件操作以及一个模拟的控制台文件管理系统

    重温一下C#中File类的一些基本操作: File类,是一个静态类,主要是来提供一些函数库用的. 使用时需要引入System.IO命名空间. 一.常用操作: 1.创建文件方法 //参数1:要创建的文件 ...

  10. shell for 循环

    test.sh #!/bin/bash for str in "C语言" "http://www.bilibili.com" "成立7年了" ...