【发布时间】:2015-07-22 19:26:54
【问题描述】:
此代码返回正确的数组,但我在 arrayFilter 函数内部作弊。通过使用matchItem[0] 和matchItem[1],我对仅使用2 个过滤器项进行了硬编码。如果少于 2 个,则测试失败,如果超过 2 个,则不会过滤掉多余的项。
function destroyer(arr) {
// Remove all the values
var destroyerArgsAmount = arguments.length;
var matchArr = arguments[0];
var newArr = [];
var matchItems = [];
for(i = 1; i < destroyerArgsAmount; i++) {
matchItems.push(arr[i]);
}
function arrayFilter(val) {
if(val != matchItems[0] && val != matchItems[1]) {
return true;
}
}
arr = matchArr.filter(arrayFilter);
return arr;
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
为什么 for 循环在这种情况下不起作用?
for(i = 0; i < matchItems.length; i++) {
if(matchItems[i] != value) {
return value;
}
这个循环在放入arrayFilter函数时不起作用
有人可以向我解释为什么,然后让我走上正确的道路吗?我认为这将是一件重要的事情,因为有很多方法采用这种方式,例如:filter、map、forEach 以及更多我还不知道的方法。
【问题讨论】:
-
这实际上很令人困惑,您是否要过滤传入的第一个数组,如果是,为什么要使用其中的值作为过滤器,而不是第二个和第三个参数?跨度>
-
@adeneo 将您的原始答案备份。我的所有代码下方都有一个我没有看到的返回语句。你是第一个而且是正确的,所以我给你一张支票。
-
你确定你不是在找这个 -> jsfiddle.net/asdkzf98
-
如果
value与matchItems中的any 元素不同,您的for循环返回true,但如果value不同,您的第一个版本返回true来自matchItems中的所有元素。
标签: javascript arrays methods