2015-11-20 39 views
0

對JavaScript仍然比較新,並試圖提高我的技能。我需要訪問數組的所有偶數索引,然後將它們相加,最後將它們乘以數組中的最後一個數字。因此,例如[0,1,2,3,4,5]的答案應該是30;「甚至最後」Array javascript練習

這是我現在擁有的。

function evenLast() { 
    a=[0,1,2,3,4,5]; 
    b=[]; 
    answer=0; 
    for(i=0; i < a.length; i++) { 
     if((a[i] % 2) === 0) { 
     b.push(a[i]); 
     answer= eval(b.join('+')); 
     } 
    } 
} 

我一直在所有的變量越來越未捕獲引用錯誤,但我不知道爲什麼。我知道我的循環應該正常工作。我試圖用(-0)切片最後一個索引,但直到剩下的工作,我不知道這是否工作。

+0

我想你會想'eval'來的結束後, '爲'循環。 – 2015-11-20 04:43:37

+2

請勿使用'eval'。 'answer + = a [i]'有什麼問題?另外,你應該聲明你的變量。 – Ryan

回答

1

這裏是我會怎麼做:

function evenLast() { 
    var a=[0,1,2,3,4,5]; 
    var answer=0; 
    for(var i=0; i < a.length; i+=2) answer += a[i]; // sum all even items 
    answer *= a[a.length - 1]; // multiply by last item 
    // answer is now 30 
} 
+0

我試過這個,它似乎應該工作。我有一個about:空白頁面打開並在chrome中運行控制檯。它不斷拋出未定義的或者說未被捕獲的參考錯誤與變量。如果我將它們聲明在函數之外,它會在console.log()函數中讀取它們,但如果它們在函數中則不會。即使我在函數中運行console.log(答案),我仍然未定義。調用該函數也會引發undefined。任何想法爲什麼? –

+0

上述函數中的所有變量都是該函數的局部變量。所以試圖在外面登錄它們是行不通的。但是當你添加一個'console.log(answer);'作爲函數中的最後一個語句時,它應該可以工作。 – techfoobar

+0

是的,它不工作的原因。我正在複製並粘貼您所寫的內容,並通過幾種方式對其進行了修改。有沒有我可能不知道的鉻控制檯的一些奇怪的功能? –

2

不知道你的錯誤,但你應該有循環結束後的eval(雖然eval沒有做到這一點的好方法)。

最終,我會用.reduce()來對偶數指數求和。

var a=[0,1,2,3,4,5]; 
 

 
var answer = a.reduce(function(s, n, i) { 
 
    return i % 2 ? s : (s + n); 
 
}) * a[a.length-1]; 
 

 
document.body.innerHTML = answer;


一些好的國際海事組織重用命名的功能。

function sumEven(s, n, i) { 
 
    return i % 2 ? s : (s + n); 
 
} 
 

 

 
var a=[0,1,2,3,4,5]; 
 

 
var answer = a.reduce(sumEven) * a[a.length-1]; 
 

 
document.body.innerHTML = answer;

0

請試試這個代碼:

var arr=[0,1,2,3,4,5], 
    sum=0, 
    last=arr[arr.length-1]; 

$.each(arr,function(index,value){ 
     if(index%2 == 0) 
     sum+=value; 
}); 

alert(sum*last); 

的jsfiddle鏈接:https://jsfiddle.net/Dee0565/ggb8919a/