许多我有是应该从参数JavaScript程序返回,而不是所需的阵列
function destroyer(arr) {
var args = [].slice.call(arr);
var data = args.shift();
for(var i = 0; i < args.length; i++){
var j = 0;
while(j < data.length){
if(args[i] == data[j]){
data.splice(j,1);
j = 0;
}
else{
j += 1;
}
}
}
return data;
}
一个列表中删除项的程序破坏者([1,2,3,1,2,3], 2,3)应该返回[1,1],但我只得到1的响应,我不知道为什么,因为当我在循环外部执行指令时,我得到数组。
更新:应该看起来像这样。
function destroyer(arr) {
var args = [].slice.call(arguments);
var data = args[0];
args.shift();
for(var i = 0; i < args.length; i++){
var j = 0;
while(j < data.length){
if(args[i] == data[j]){
data.splice(j,1);
j = 0;
}
else{
j += 1;
}
}
}
// Remove all the values
return data;
}
它返回1,因为 '破坏者([1,2,3,1,2,3],2,3)'套'args'是'[1,2 ,3,1,2,3]',那么你将数据设置为'args.shift()',它将'args'移到'[2,3,1,2,3]',但将'data'设置为'1' – Alexander
[Array.prototype.shift](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift?v=control)返回已移除的元素。 – Hodrobond
也许你的意思是'var args = [] .slice.call(arguments);' - 当你的代码站立时,参数2和3永远不会被引用(使用es6,你也可以将函数定义更改为'function destroyer(.. .arr){'为了得到你期望的结果 –