function destroyer(arr) {
// Remove all the values
var toFilter;
var toFrom;
for(var i=0;i<arguments.length;i++) {
if (typeof arguments[i]=="object") {
toFilter = arguments[i];
} else {
toFrom = arguments[i];
}
}
var result = toFilter.filter(function(value,index,array) {
if(value===toFrom) {
return true;
}
return result;
});
console.log(result);
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3); // it should return [1,1]
我试图解决这个算法差不多一周了。在这个任务中,我们需要删除初始数组中存在的参数值,他们已经提到过使用参数和filter方法来解决这个问题。我知道Javascript中的过滤器和参数是什么,我使用过滤器方法解决了以前的算法,我阅读了有关参数和它的使用但从未使用过它。每当我用这两个做某事时,它给了我一个空白的数组。请任何人都可以帮助我如何使用过滤器和参数来做到这一点?
答案 0 :(得分:0)
只是我的想法,你可以按照你想要的方式修改它:
function isValid() {
return value != 2 && value != 3;
}
var arr = [1, 2, 3, 1, 2, 3];
arr.filter(isValid); //It should return [1,1];
您现在需要的是从arguments
对象获取2和3值并更改isValid函数。
答案 1 :(得分:0)
您可以做的是构建一个要从数组中删除的值的查找,然后通过返回查找中不存在的值来过滤原始数组:
function destroyer(arr) {
var lookup = {};
// For each remaining argument, add it to the lookup.
for (var i = 0; i < arguments.length; i++) {
lookup[arguments[i]] = true;
}
// Filter the array and return a new array
// with elements that don't exist in the lookup.
return arr.filter(function(elem) {
return typeof lookup[elem] === 'undefined';
});
}
console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3)); //it should return [1,1]
答案 2 :(得分:0)
有几个问题,让我们逐一列出:
toFrom
,所以你没有获得所有非对象(即2&amp; 3),而只是获得最后一个非对象(即3)filter()
中,返回true
表示“将此元素保留在列表中”,如果值等于{{1},则返回true
}} 我没有尝试,但我猜您的代码会输出toFrom = 3
,因此如果您想输出[3,3]
,请尝试根据您的版本修改以下代码:
[1,1]
或者您可以尝试我的版本:)
function destroyer(arr) {
// Remove all the values
var toFilter;
var toFrom = [];
for(var i=0;i<arguments.length;i++) {
if (typeof arguments[i]=="object") {
toFilter = arguments[i];
} else {
// maintain a list of ALL non-objects which to be filtered
toFrom.push(arguments[i]);
}
}
var result = toFilter.filter(function(value,index,array) {
if(toFrom.indexOf(value) != -1) {
// If element is in the toFrom list, DO NOT keep it
return false;
}
return true;
});
console.log(result);
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3); // it should return