[英]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.