繁体   English   中英

为什么javascript函数返回未定义

[英]why is javascript function returning undefined

我试图编写一个函数,将一个数组的第一个元素添加到另一个元素,直到它在javascript中具有单个值为止。 如果我仅传递数组中的一个元素,则程序可以工作,但是如果我传递多个元素,则该函数返回undefined。 任何帮助,将不胜感激。

function fold(input) {
  if (input.length === 1) {
    return input[0];
  } else {
    var newArray = add(input[0], input.slice(1, input.length));
    if (newArray.length > 1) {
      fold(newArray);
    } else {
      return newArray[0];
    }
  }
}

var arr = [1, 4, 7];
var sum = fold(arr);
console.log("the sum is " + sum); //should return 13

如果函数undefined返回任何内容,则默认情况下将返回undefined 您必须return该函数:

更改

fold(newArray); return fold(newArray);

 function add(additem,arr){ return arr.map(x => x + additem); } function fold(input){ if(input.length===1){ return input[0]; } else { var newArray=add(input[0],input.slice(1, input.length)); if(newArray.length > 1){ return fold(newArray); // return here } else{ return newArray[0]; } } } var arr=[1,4,7]; var sum=fold(arr); console.log("the sum is " + sum); //should return 13 

您在fold(newArray);错过的return fold(newArray); 声明。

我添加了两种方法来解决此问题。 最好的方法是方法3。这种方法的想法是为剩余元素“构建地板”。
考虑数组具有n个元素。
步骤0:通过将array [0]的值相加,为array [1],array [2],... array [n]建立基础
步骤1:通过将array [1]的值相加,为array [2],array [3],... array [n]建立基础
步骤2:通过将array [2]的值相加,为array [3],array [4],... array [n]建立基础
...
步骤n-1:通过添加array [n-1]的值来构建array [n]的楼层
完成此步骤后,array [n]是您最后需要的值!

//way1 = your way
function add(additem,arr){   
  return arr.map(x => x + additem);
}
function fold(input){
  if(input.length===1){
    return input[0];
  }
  else {
    var newArray=add(input[0],input.slice(1, input.length));
    if(newArray.length > 1){
      return fold(newArray); // return here               
    }      
    else{
      return newArray[0];
    }    
  }     
}

//way2
function way2(array){
    result = array;
    for(var i=0;i<result.length-1;i++){
      result = result.map(x=>x+result[i]);
    }
    return result[result.length-1];
}

//way3
function way3(array){
    var result = array;
    for(var i=0;i<result.length;i++)
      for (var j=i+1;j<result.length;j++)
        result[j] = result[i] + result[j];
    return result[result.length-1];
}
var arr=[2,5,4,3,1,3,4,9];
var sum=fold(arr);
console.log("Initial arr = " + arr);
console.log("way1 = the sum is: " + sum);
console.log("way2 = the sum is: " + way2(arr));
console.log("way3 = the sum is: " + way3(arr));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM