Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么javascript函数返回未定义_Javascript_Arrays - Fatal编程技术网

为什么javascript函数返回未定义

为什么javascript函数返回未定义,javascript,arrays,Javascript,Arrays,我试图编写一个函数,将数组的第一个元素添加到另一个元素,直到它在javascript中有一个值为止。如果我只传递数组中的一个元素,程序将工作,但如果我传递了多个元素,函数将返回未定义。任何帮助都将不胜感激 function fold(input) { if (input.length === 1) { return input[0]; } else { var newArray = add(input[0], input.slice(1, input.length));

我试图编写一个函数,将数组的第一个元素添加到另一个元素,直到它在javascript中有一个值为止。如果我只传递数组中的一个元素,程序将工作,但如果我传递了多个元素,函数将返回未定义。任何帮助都将不胜感激

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

您在
折叠(newArray)中错过的
返回
语句。

如果函数没有返回任何内容,则默认情况下会返回
未定义的
。您必须
返回
函数:

改变

fold(新数组)到<代码>返回折叠(新数组)

函数添加(additem,arr){
返回arr.map(x=>x+additem);
}
功能折叠(输入){
如果(输入.长度===1){
返回输入[0];
}
否则{
var newArray=add(输入[0],输入.slice(1,输入.length));
如果(newArray.length>1){
return fold(newArray);//在这里返回
}      
否则{
返回newArray[0];
}    
}     
}
var-arr=[1,4,7];
var总和=倍数(arr);

console.log(“总和为”+sum)//应该返回13
我添加了两种方法来解决这个问题。最好的方法是方法3。这种方法的思想是为剩余元素“构建地板”。
考虑数组有n个元素。 步骤0:为阵列[1]、阵列[2]、。。。通过将数组[0]的值相加得到数组[n]
步骤1:为阵列[2]、阵列[3]、。。。通过将数组[1]的值相加得到数组[n]
步骤2:为阵列[3]、阵列[4]、。。。通过将数组[2]的值相加得到数组[n]

步骤n-1:通过添加阵列[n-1]的值为阵列[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));
//way1=你的方式
函数add(additem,arr){
返回arr.map(x=>x+additem);
}
功能折叠(输入){
如果(输入.长度===1){
返回输入[0];
}
否则{
var newArray=add(输入[0],输入.slice(1,输入.length));
如果(newArray.length>1){
return fold(newArray);//在这里返回
}      
否则{
返回newArray[0];
}    
}     
}
//途径2
功能通道2(阵列){
结果=数组;
对于(var i=0;ix+结果[i]);
}
返回结果[result.length-1];
}
//途径3
功能通道3(阵列){
var结果=数组;

对于(var i=0;ii),如果希望对数组中的所有元素求和。