javascript程序返回一个数字而不是所需的数组

时间:2017-05-30 23:05:34

标签: javascript algorithm

我有一个程序应该从参数列表中删除项目

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;
}

3 个答案:

答案 0 :(得分:0)

作为替代方案,您可以使用spread syntax来删除要删除的元素数组,并使用Array.prototype.filter来过滤掉这些元素,例如

function destroyer(arr, ...args) {
  return arr.filter(e => !args.includes(e));
}

console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3)); // [1, 1]

答案 1 :(得分:0)

您应该使用spread syntax表示会有更多参数

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;
}

console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3));

答案 2 :(得分:0)

又一种变体。

function destroyer(array) {
  var pos, args = [].slice.call(arguments, 1),
  arrLength = array.length,
  newArray = [];
  
  while ((arrLength -= 1) >= 0) {
    pos = args.lastIndexOf(array[arrLength]);
    if (!~pos) {
      newArray.unshift(array[arrLength]);
    }
  }

  return newArray;
};

console.log(destroyer([1,2,3,1,2,3], 2, 3));
console.log(destroyer([1,2,3,1,2,3], 1, 3));
console.log(destroyer([1,2,3,1,2,3], 1, 2));
console.log(destroyer([1,2,3,1,2,3], 1, 2, 3));
console.log(destroyer([1,2,3,1,2,3], 4));