目标是创建一个名为destroyer的函数,该函数在数组初始数组参数之后过滤所有参数。
我不是很擅长函数式编程,所以我的答案不起作用,但是我得到了一些我不理解的鱼类结果。这是我的职责:
function destroyer(arr) {
var count = 1;
var result = arr;
return result.reduce(function(val){
if (count < arguments.length){
console.log('count is ' + count);
console.log("filtering " + arguments[count]);
result = result.filter(function(val){val!=arguments[count]});
count += 1;
return result;
}
else {
return result;
}
}, count);
}
给定destroyer([1, 2, 3, 1, 2, 3], 2, 3);
,此值为[]
,而应返回[1,1]
我的控制台记录以下内容:
"count is 1"
"filtering 1"
"count is 2"
"filtering 1"
"count is 3"
"filtering 1,2,3,1,2,3"
我不明白:
< arguments.length
(即3),而不是<=
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
,为什么没有参数[count](应限制在1 - 2之间)返回控制台日志&#34;过滤2&#34; ...&#34;过滤3&#34; ...(没有别的......我不知道为什么最后一个日志会出现)。答案 0 :(得分:2)
这里的问题是你在一个函数中有一个嵌套函数,并且DELETE /products/{id}/features/{featureId}
对象的值在两个闭包内都是不同的。
我建议将它们存储在局部变量中,而不是重复使用arguments
。
我在控制台中干了你的代码,并为第一次运行附加了arguments
对象和其他变量的值的屏幕截图,供您理解。
注意arguments
行之前和之后arguments
的值如何变化。
答案 1 :(得分:1)
我会尽力帮助你。 1)参数是4,而不是3.添加
console.log(arguments);
console.log(arguments.length);
你会亲眼看到它。第一个参数是函数reduce的累加器。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
答案 2 :(得分:1)
function destroyer(arr) {
var count = 1;
var result = arr;
var args = arguments; //keep reference of original passed arguments;
return result.reduce(function(val){
//use args not arguments because here arguments
//will refer to the arguments of the inner function
if (count < args.length){
console.log('count is ' + count);
console.log("filtering " + args[count]);
result = result.filter(function(val){return val!=args[count]});
count += 1;
return result;
}
else {
return result;
}
}, count);
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
答案 3 :(得分:-1)
我的解决方案:
function removeAll(_arr, _rem)
{
while(_arr.indexOf(_rem) !== -1)
{
var i = _arr.indexOf(_rem);
_arr.splice(i,1);
}
return _arr;
}
function destroyer(_arr, _remA, _remB)
{
var arr = removeAll(_arr, _remA);
arr = removeAll(arr, _remB);
return arr;
}
var arr = destroyer([1,2,3,1,2,3], 2, 3);
console.log(arr);
document.getElementById('divOut').innerHTML = 'destroyer([1,2,3,1,2,3], 2, 3) -> ' + JSON.stringify(arr);
&#13;
<div id='divOut'></div>
&#13;
虽然我更愿意发送一系列内容来摧毁&#39; (/删除)如下:
function removeAll(_arr, _rem)
{
while(_arr.indexOf(_rem) !== -1)
{
var i = _arr.indexOf(_rem);
_arr.splice(i,1);
}
return _arr;
}
function destroyer(_arr, _remArray)
{
var arr = _arr.splice(0); // clone array
for(var c = 0, length = _remArray.length; c < length; c++)
{
arr = removeAll(arr, _remArray[c]);
}
return arr;
}
var arr = destroyer([1,2,3,4,5,1,2,3,4,5], [2,3,5]);
console.log(arr);
document.getElementById('divOut').innerHTML = 'destroyer([1,2,3,4,5,1,2,3,4,5], [2,3,5]) -> ' + JSON.stringify(arr);
&#13;
<div id="divOut"></div>
&#13;