ES6其余参数参数示例

时间:2019-06-10 17:06:34

标签: javascript arrays

我不太了解下面的JavaScript示例。

function containsAll(arr) {
  for (let k = 1; k < arguments.length; k++) {
    let num = arguments[k];
    if (arr.indexOf(num) === -1) {
      return false;
    }
  }
  return true;
}
let x = [2, 4, 6, 7];
console.log(containsAll(x, 2, 4, 7));
console.log(containsAll(x, 6, 4, 9));

控制台中的输出为10

我正在尝试设想它应该如何工作。

  1. 在此console.log(containsAll(x,2,4,4,7))中,应替换x,将其更改为console.log(containsAll(2,4,6,7,2,2, 4,7))。
  2. function containsAll获得这些数字(2、4、6、7、2、4、7)。
  3. 在这一行中,for(let k = 1; k < arguments.length; k++)k应该是一个新数组[1、2、3、4、5、6],其参数长度是arr的长度(在这种情况下,长度为7),对吗?

  4. 下一步,let num = arguments[k]; if (arr.indexOf(num) === -1) {return false;} let num应该是num = 1,对吧?

  5. 然后,在if语句中,它测试1是否在数组中,arr = [2,4,6,6,7,2,4,7]。如果找不到匹配项,则返回false。并且应该对arr数组中的下一个数字重复,对吗?

我只是想弄清楚为什么它在返回1之类的内容时会为console.log(containsAll(x, 2, 4, 7));输出[false, true, false, true, false, true]

2 个答案:

答案 0 :(得分:2)

  
      
  1. 在此console.log(containsAll(x,2,4,4,7))中,应替换x,将其更改为console.log(containsAll(2,4,6,7,2,2, 4,   7))。
  2.   

否,它停留在[2, 4, 6, 7], 2 ,4 ,7

  
      
  1. function containsAll获得这些数字(2、4、6、7、2、4、7)。
  2.   

它得到[2, 4, 6, 7], 2 ,4 ,7

  
      
  1. 在这一行中,for(let k = 1; k < arguments.length; k++)k应该是一个新数组[1、2、3、4、5、6],其参数长度   是arr的长度(在本例中为7),对吧?
  2.   

k只是一个数字,表示arguments中的索引而不是数组。 长度只有4,数组只是一个元素

  
      
  1. 下一步,let num = arguments[k]; if (arr.indexOf(num) === -1) {return false;} let num应该是num = 1,对吧?
  2.   

num遍历arguments2 ,4 ,7)的其余元素。请注意,for循环中的k=1会跳过第一个元素。

  
      
  1. 然后,在if语句中,它测试1是否在数组中,arr = [2,4,6,7,2,4,7]。如果找不到匹配项,则返回false。和   应该重复arr数组中的下一个数字,对吗?
  2.   

如果找到第一个匹配项,则已经返回。

  

我只是想弄清楚为什么输出1   console.log(containsAll(x, 2, 4, 7));应该何时返回   类似于[false, true, false, true, false, true]

调用return时,方法内的执行停止。

答案 1 :(得分:0)

First, your code currently outputs `true` and `false` not 1 and 0.
The reason you don't have an array like this,[false, true, false, true, false, true], is because of the `return` keyword used in the conditional `if` statement inside your `for` loop.

下面的代码是一种实现方法。

function containsAll(arr) {
  let result = []
  for (let k = 1; k < arguments.length; k++) {
    let num = arguments[k];
    if (arr.indexOf(num) === -1) {
      result.push(false);
    } else{
        result.push(true);
    }
  }
    return result;
}
let x = [2, 4, 6, 7];
console.log(containsAll(x, 2, 4, 7)); //Output [true, true, true]
console.log(containsAll(x, 6, 4, 9)); //Output [true, true, false]