【问题标题】:A function which takes an array as argument, with a forEach loop which console.log each element and each index for every iteration inside the function一个以数组为参数的函数,带有一个 forEach 循环,该循环控制台记录函数内每次迭代的每个元素和每个索引
【发布时间】:2021-10-18 18:34:52
【问题描述】:

我必须创建一个以数组作为参数的函数,并使用一个 forEach 循环来控制台记录函数内每次迭代的每个元素和每个索引。同样在函数内部声明一个名为count的变量,每次迭代将其加一,然后返回count。

//======================  EXAMPLE  ========================
looper([2,4,8,7])
4 // <======  EXPECTED OUTPUT
//=========================================================

我写了这个函数:

function looper(arr) {
    arr.forEach(function console (item, index){
        var count = 0;
        count++;
        console.log(("I am item ", item, "I am the index ", index));
        return count;
    })
}

但我收到以下错误:

VM76:5 Uncaught TypeError: console.log is not a function
    at console (<anonymous>:5:17)
    at Array.forEach (<anonymous>)
    at looper (<anonymous>:2:9)
    at <anonymous>:1:1

为什么 console.log 不是函数?不是每个浏览器都预装的吗?

【问题讨论】:

  • 您将回调命名为“控制台”,而只是传递一个匿名函数,同样,从 forEach() 返回没有任何效果,它总是根据其定义返回 undefined
  • 正如@pilchard 所说,您将函数命名为控制台,这就是为什么.log 上不存在它的原因,而且您的返回语句必须在forEach 循环之外才能返回值
  • 你不能使用console 作为名字的函数。替换为:arr.forEach(function(item, index){

标签: javascript function loops foreach


【解决方案1】:
  1. count 应该在forEach() 回调函数之外声明和返回。否则,您每次通过循环将其重置为0。并且forEach()的返回值不是包含函数返回的。

  2. console.log未定义的错误是因为你将回调函数命名为console。这会影响全局 console 对象。回调函数无需命名。

  3. 您不应该在console.log() 的参数周围加上一组额外的括号。这使它们成为使用 comma operator 的表达式,因此它只记录每次调用中的最后一项。

function looper(arr) {
  var count = 0;
  arr.forEach(function(item, index) {
    count++;
    console.log("I am item ", item, "I am the index ", index);
  })
  return count;
}

console.log(looper([1, 3, 4, 10]));

【讨论】:

    猜你喜欢
    • 2019-07-26
    • 1970-01-01
    • 2018-12-27
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 2015-04-04
    • 2017-04-28
    相关资源
    最近更新 更多