<-- 要求说明 -->
摧毁数组
金克斯的迫击炮!
实现一个摧毁(destroyer)函数,第一个参数是待摧毁的数组,其余的参数是待摧毁的值。
当你完成不了挑战的时候,记得开大招'Read-Search-Ask'。
这是一些对你有帮助的资源:
<-- 个人理解 -->
需要获取传入参数具体是什么,根据提示,学习arguments对象,主要内容如下:
arguments 是一个类数组对象。代表传给一个function的参数列表。
既然是类数组对象,除了length和下表index,其他的数组方法都不能使用,如果需要进行数组的操作,需要将arguments中传入的参数传到一个真正的数组中。
var newArr = []; for( var i=1; i<arguments.length; i++ ){ // 这里i从1开始,是因为arguments的列表中使所有传递给function的参数,包括第一个数组 newArr.push( arguments[i] ); }
这样就可以将arr数组中的每一项使用indexOf()方法对应在newArr中进行查找,再把查找的结果进行return,通过filter()对return进行筛选就可以得到正确的结果。
<-- 代码实现 -->
function destroyer( arr ){ var newArr = []; for( var i=1; i<arguments.length; i++ ){ newArr.push( arguments[i] ); } return arr.filter( function( item ){ return newArr.indexOf( item ); } ) }
<-- 总结 -->
卡住的原因:
① 对filter没有真正理解;
② 对于方法的使用掌握不熟练,没有第一时间想到使用indexOf()。