为什么javascript函数返回未定义
我试图编写一个函数,将数组的第一个元素添加到另一个元素,直到它在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));
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),如果希望对数组中的所有元素求和。