Это официальный вопрос HW.
Напишите функцию с именем sum_even_index, параметром которой является список/массив десятичных чисел. Ваша функция должна возвращать сумму записей с четными индексами параметра (например, сумму записей, хранящихся с индексами 0, 2, 4 и т. д.).
Я искал часы и до сих пор не могу понять это. На этом сайте большинство ответов относятся к числу в массиве, а не к фактическому индексу. Это печатает 0. Но должно печатать 4
function sum_even_index(x) {
let sum = 0
for (let i in x) {
if (x.indexOf[i] % 2 === 0) {
sum = sum + x[i];
}
}
return sum;
}
console.info(sum_even_index([1, 2, 3, 4]))Учтите let sumEven = arr => arr.reduce((sum, value, i) => sum += i%2? 0 : value, 0);. ;-)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если я вас правильно понял, вы должны изменить эту строку if (x.indexOf[i] % 2 === 0) { на if (i % 2 === 0) {.
Цикл ForEach
function sum_even_index(x){
let sum = 0;
x.forEach( (i, e) => {
if (i % 2 === 0) {
sum = sum + e;
}
})
return sum;
}
console.info(sum_even_index([1,2,3,4]))ваш подход, но лучше взять цикл forEach
function sum_even_index(x){
let sum=0;
for (let i in x){
if (i % 2 === 0) {
sum = sum + x[i];
}
}
return sum;
}
console.info(sum_even_index([1,2,3,4]))Спасибо!!! я думаю, что путаю с python, потому что, насколько я понимаю, я думал, что мне будут присвоены значения 1 2 3 4, а не фактические индексы
@MaikLowrey for (let i of x) дает вам элементы массива («из», а не «в»). Да, странно. Также, как один лайнер: return x.reduce((sum, el, i) => i%2 ? sum : sum+el, 0);
@дан и Энди. Спасибо за советы! Я просто хотел указать на точку i% 2. И цикл forEach или for также сделает это. Я добавлю это к своему ответу. Спасибо коллеги!
@MaikLowrey - я хотел направить свой комментарий вопрошающему (Эммануэль). Извините за ошибку.
@danh Я думаю, хорошо, что ты указал мне на это. Я уже отрегулировал. Мерси и хороших выходных
Вот версия с .reduce():
const data=[1,2,3,4,5];
console.info(data.reduce((a,c,i)=>
a+(i%2?0:c),0))Или i%2?0:c, если вы хотите еще меньше символов...
Да - точка взята!
Меньше символов само по себе не имеет никакой ценности и потенциально нежелательно. В любом случае большая часть кода минимизируется перед передачей, поэтому сокращение имен переменных исключительно ради меньшего количества символов просто делает менее читаемый код, который сложнее поддерживать. См. data.reduce((sum, value, index) => ...). Этот ответ также не предоставляет начальное значение для аккумулятора a, поэтому он выдаст ошибку, если ему будет передан пустой массив.
Спасибо за эти тонкости, @RobG! Я скорректировал свой ответ. Что касается имен переменных, я также согласен с вами. Однако в данном конкретном случае все настолько просто, что я просто буду придерживаться своих «стандартных» названий: accumulator, current и index.
for...in для объектов, с использованием массивов for...of
Не знаю, лучший ли это способ сделать это, но работает.
function sum_even_index(x) {
let sum = 0
for (const [i,v] in x.entries()) {
if (i % 2 === 0) {
sum = sum + x[i];
}
}
return sum;
}
console.info(sum_even_index([1, 2, 3, 4]))Массивы — это объекты. ;-) Раньше считалось, что for..in с массивами ненадежно, так как индексы не могут быть возвращены в числовом порядке, и он также перебирает унаследованные свойства.
танки за знания :)
for (
let i in x) дает ключи массива. Попробуйтеif (i % 2 === 0) {