Как добавить сумму четных ИНДЕКСОВ в javascript?

Это официальный вопрос 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]))

for (let i in x) дает ключи массива. Попробуйте if (i % 2 === 0) {

danh 07.10.2022 22:16

Учтите let sumEven = arr => arr.reduce((sum, value, i) => sum += i%2? 0 : value, 0);. ;-)

RobG 07.10.2022 22:47
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
2
121
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Если я вас правильно понял, вы должны изменить эту строку 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, а не фактические индексы

Manuel 07.10.2022 22:21

@MaikLowrey for (let i of x) дает вам элементы массива («из», а не «в»). Да, странно. Также, как один лайнер: return x.reduce((sum, el, i) => i%2 ? sum : sum+el, 0);

danh 07.10.2022 22:25

@дан и Энди. Спасибо за советы! Я просто хотел указать на точку i% 2. И цикл forEach или for также сделает это. Я добавлю это к своему ответу. Спасибо коллеги!

Maik Lowrey 07.10.2022 22:31

@MaikLowrey - я хотел направить свой комментарий вопрошающему (Эммануэль). Извините за ошибку.

danh 07.10.2022 22:33

@danh Я думаю, хорошо, что ты указал мне на это. Я уже отрегулировал. Мерси и хороших выходных

Maik Lowrey 07.10.2022 22:37

Вот версия с .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, если вы хотите еще меньше символов...

vera. 07.10.2022 22:58

Да - точка взята!

Carsten Massmann 07.10.2022 23:00

Меньше символов само по себе не имеет никакой ценности и потенциально нежелательно. В любом случае большая часть кода минимизируется перед передачей, поэтому сокращение имен переменных исключительно ради меньшего количества символов просто делает менее читаемый код, который сложнее поддерживать. См. data.reduce((sum, value, index) => ...). Этот ответ также не предоставляет начальное значение для аккумулятора a, поэтому он выдаст ошибку, если ему будет передан пустой массив.

RobG 08.10.2022 10:07

Спасибо за эти тонкости, @RobG! Я скорректировал свой ответ. Что касается имен переменных, я также согласен с вами. Однако в данном конкретном случае все настолько просто, что я просто буду придерживаться своих «стандартных» названий: accumulator, current и index.

Carsten Massmann 08.10.2022 10:14

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 с массивами ненадежно, так как индексы не могут быть возвращены в числовом порядке, и он также перебирает унаследованные свойства.

RobG 08.10.2022 09:50

танки за знания :)

v.k. 08.10.2022 18:26

Другие вопросы по теме