代码之家  ›  专栏  ›  技术社区  ›  Max Michel

如何编写foreach语句中要使用的函数来添加数组中的所有数字?

  •  0
  • Max Michel  · 技术社区  · 6 年前

    我有一个练习,我必须编写自己的foreach函数,它接受一个数组和一个“callback”函数来添加数组中的所有元素。 到目前为止,我有:

    function forEachTest(arr, func){
        func(arr) // Simply apply the function to the array
    }
    

    不过,我不知道这是否是foreach调用的正确工作方式。

    其次,添加元素的函数将获取数组,并以某种方式逐个添加每个元素,直到到达数组的末尾,然后是console.log(result)。

    我试图用一个变量来存储这个值,但这不起作用,结果我得到了NaN。

    function addEach(arr) {
        var sum;
        for(i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        console.log(sum);
    }
    

    当我调用foreachtest(arr,addeach)时,NaN发生;

    请注意,arr是包含数字的任何数组。

    3 回复  |  直到 6 年前
        1
  •  2
  •   Ele    6 年前

    初始化变量 sum = 0 .

    function forEachTest(arr, func) {
      func(arr);
    }
    
    function addEach(arr) {
      var sum = 0;
      for (i = 0; i < arr.length; i++) {
        sum += arr[i];
      }
      console.log(sum);
    }
    
    forEachTest([1,2,3], addEach);
        2
  •  0
  •   A l w a y s S u n n y    6 年前

    初始化您的 sum 随变量 0 因为在你的函数内部 undefined . 所以在你的循环中,它是这样执行的 undefined=undefined+1 , undefined=undefined+2 等等,哪个是 NaN 为数组中的每一个数字。我想你也错过了 return 在你之前 func(arr);

    function forEachTest(arr, func){
         return func(arr) // Simply apply the function to the array
    }
    
    function addEach(arr) {
        var sum=0;// see here
        for(i = 0; i < arr.length; i++) {
            sum += arr[i];
            //console.log(sum += arr[i]) //for debug purpose
        }
        //console.log(sum);
        return sum;
    }
    
    console.log(forEachTest([1,2,3,4,5],addEach))
        3
  •  -1
  •   Asaf Aviv    6 年前
    function forEachTest(arr, func) {
      return func(arr);
    }
    
    function addEach(arr) {
      return arr.reduce((sum, val) => sum + val, 0);
    }
    
    console.log(forEachTest([1, 2, 3], addEach));
    

    另一种使用循环的方法,因为您不想使用reduce

    function forEachTest(arr, func) {
      return func(arr);
    }
    
    function addEach(arr) {
      let sum = 0;
      for (const num of arr) {
        sum += num;
      }
      return sum;
    }
    
    console.log(forEachTest([1, 2, 3], addEach));