【问题标题】:Javascript for loop write to array undefinedJavascript for循环写入未定义的数组
【发布时间】:2018-05-28 11:19:12
【问题描述】:

嗨,我正在做 eloquent javascript chp4 The Sum of a Range 的第一部分。 花了一些时间后,我确定我已经破解了第一部分。

"写一个范围函数,它有两个参数,开始和结束, 并返回一个包含从开始的所有数字的数组 直到(包括)结束。”

我查看了人们的答案,但它们都包含问题的其他部分。我想保持简单,毕竟如果我不能做第一部分,那就没有希望了。这似乎很容易。

function range(start, end) {
  let array = [];

  for (let i = start; i <= end; i++){array.push(i);}
}

console.log(range(20 , 25));

但我不确定,我什至尝试复制和减少类似情况的书籍答案。

感觉就像我的大脑无法编写代码。我哪里错了?为什么它是未定义的?

下面给出答案

function range(start, end, step = start < end ? 1 : -1) {
  let array = [];

  if (step > 0) {
    for (let i = start; i <= end; i += step) array.push(i);
  } else {
    for (let i = start; i >= end; i += step) array.push(i);
  }
  return array;
}

function sum(array) {
  let total = 0;
  for (let value of array) {
    total += value;
  }
  return total;
}

console.log(range(1, 10))
// → [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
console.log(range(5, 2, -1));
// → [5, 4, 3, 2]
console.log(sum(range(1, 10)));
// → 55

谢谢大家

【问题讨论】:

  • 您没有在range 函数的末尾使用returnarray,导致对range 的调用总是返回undefined。
  • return array 就在关闭循环之前

标签: javascript arrays eloquent


【解决方案1】:

你没有从range 返回任何东西。在range函数中使用return array;:

function range(start, end) {
  let array = [];

  for (let i = start; i <= end; i++){array.push(i);}
  return array;
}

console.log(range(20 , 25));

【讨论】:

    【解决方案2】:

    变量array 用let 声明,赋予它块范围。它在函数range中声明

    function range(start, end) {
      let array = [];
    
      for (let i = start; i <= end; i++){array.push(i);}
    }
    

    当函数终止时,它的持续时间到期。之后就不存在了。

    正如其他人已经说过的,return array。

    这样就可以为调用它的行保留一个引用。如果在那里分配给另一个引用,则数组的持续时间将延长直到未被引用。然后进入垃圾回收。

    例子:

    let arr = range(5,10);
    

    【讨论】:

      【解决方案3】:

      雄辩的java脚本代码可以是这样的:

      function range(start,end,step){
        let myArr=[];
        if(step){
          for(let i=start;i<=end;i+=step){
          myArr.push(i);
        }
      return myArr;
        }
        else{
        for(let i=start;i<=end;i++){
          myArr.push(i);
        }
        return myArr;}
      }
      
      
      function sum(arr){
        let total=0;
        for (let item of arr){
          total +=item;
        }
        return total;
      }
      sum(range(1,10,2));
      

      【讨论】:

        猜你喜欢
        • 2011-09-28
        • 1970-01-01
        • 2016-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多