2015-11-20 2 views
0

все еще довольно новое для javascript и пытается обострить мои навыки. Мне нужно получить доступ ко всем четным индексам массива, а затем добавить их вместе и, наконец, умножить их на последнее число в массиве. Так, например, ответ должен быть равен 30 для [0, 1, 2, 3, 4, 5];«даже последний» 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' прийти после окончания 'for'. –

+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

Я пробовал этот, и кажется, что он должен работать. У меня есть: пустая страница открыта и запускает консоль в хроме. Он продолжает бросать неопределенные или указывать ошибку сравнения с переменными. Если я объявляю их вне функции, они читают их, когда я их 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;


Nicer для повторного использования именованных функций ИМО.

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/

Смежные вопросы