Javascript for循环写入数组undefined

时间:2018-05-28 11:19:13

标签: javascript arrays eloquent

嗨我正在做eloquent javascript的第一部分chp4一个范围的总和。 花了一些时间我确定我破解了第一部分。

“编写一个带有两个参数的范围函数,start和end,   并返回一个包含start中所有数字的数组   到(并包括)结束。“

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

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

thx guys

3 个答案:

答案 0 :(得分:4)

您没有从range返回任何内容。在return array;函数中使用range

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

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

console.log(range(20 , 25));
&#13;
&#13;
&#13;

答案 1 :(得分:1)

变量arraylet声明,赋予它块范围。它在函数range

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

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

及其持续时间在函数终止时到期。之后它就不存在了。

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

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

示例:

let arr = range(5,10);

答案 2 :(得分:0)

雄辩的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));