-
Notifications
You must be signed in to change notification settings - Fork 281
seek and destroy
LYF edited this page Jul 11, 2016
·
3 revisions
金克斯的迫击炮
题目链接:https://freecodecamp.cn/challenges/seek-and-destroy
这道题目有点难度,也非常有意思,也有多种实现方式。
1、双重for循环,仅依靠javascript ES3版本就能实现。
function destroyer(arr) {
for(var i=0; i<arr.length; i++){
var bool = false;
for(var j = 1; j < arguments.length; j++){
if(arr[i] === arguments[j]){
arr.splice(i,1); bool = true;
break;
}
}
if(bool){
i = i-1;
}
}
return arr;
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
2、用javascript ES5版本中的Array.filter() + for循环也能实现
function destroyer(arr) {
var argument = arguments;
var result = arr.filter(function(ele,index){
var bool = true;
for(var i = 1; i < argument.length; i++){
if(ele === argument[i]){
bool = false;
break;
}
}
return bool;
});
return result;
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
3、用javascript ES5版本中的Array.filter() + ES5中的indexOf + ES6中的Rest parameters + ES6中的Arrow Function
function destroyer(arr,...restArgs) {
return arr.filter(ele => {
return restArgs.indexOf(ele) === -1
});
}
4、用javascript ES6版本中的Array.from() + ES7版本中的Array.includes()
function destroyer(arr) {
var args = Array.from(arguments); //把实参arguments转化为数组args
args.shift(); //通过数组的shift()方法去掉第一个元素[1,2,3,1,2,3],获得剩余的数组[2,3]
return arr.filter(function(x) { //通过数组的filter()方法来迭代数组所有的元素,x代表每次迭代的元素
return !args.includes(x); //通过数组的includes()方法来判断数组[2,3]中是否包含x元素,用!取反的意思是只留下未找到的元素。
});
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
非常感谢你能在万千GitHub项目中发现这里,如果你也喜欢这个项目,不要忘记给我们点赞(Star)哦。
如果想知道项目的每一步进展,可以关注(Watch)我们哦。
如果想贡献代码,提交PR,可以新建一个属于自己的分支(Fork)哦。
欢迎你来到freecodecamp中文社区。