【发布时间】:2016-05-25 04:33:17
【问题描述】:
我尝试根据传递的变量删除一些单词。
但是,我写了两个版本的代码,它们有细微的不同!
他们产生了不同类型的输出,我不明白为什么!
所以我需要你们的帮助,非常感谢你们!
这个函数将接受不同数量的变量,
可能是 ( [arr],1,2 ) 或 ( [arr],1,2,8,9...) 等,
并根据传递的数字删除第一个数组中的变量。
例如:destroyer ( [1, 2, 3, 4], 2, 3 ) --> 输出应该是[1,4]
这是我的代码。 (注意与粗体字体的细微差别!)
function destroyer(arr) {
for ( var i = 1; i < arguments.length; i++ ){
arr = arguments[0].filter(function(value){
if( value == arguments[i]){
return false;
}else{
return true;
}
});
}
return arr;
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
输出将是 [1,2,3,1,2,3],这意味着 value == arguments[i] 不起作用。然而,
function destroyer(arr) {
for ( var i = 1; i < arguments.length; i++ ){
filter = arguments[i];
arr = arguments[0].filter(function(value){
if( value == filter){
return false;
}else{
return true;
}
});
}
return arr;
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
这个版本完美地展示了我 [1,1]。
那么第一个版本出了什么问题???谢谢!!
【问题讨论】:
-
我可以建议一个更简洁的代码替代方案 - jsfiddle.net/2zm32uom/1
标签: javascript filter arguments default-arguments