Как перебрать массив?

Нужно реализовать такой обход массив:
на первом шаге, сложить соседние элементы.
на втором, сложить элементы, находящиеся на расстоянии 2 друг от друга.
на третьем шаге, сложить элементы, находящиеся на расстоянии 4 друг от друга.

3 часа сижу, и не могу ничего придумать. Помогите)
  • Вопрос задан
  • 1101 просмотр
Решения вопроса 1
@undefined_title
//var initialData = [1, 9, 4, 95, -3, 51, 6, 9, 4, 4,-9, 88, 27];
var initialData = [2, 2, 2, 2, 2, 2, 2, 2, 2, 2];

var wayFirst = function(data) { 
  var sum = 0;
  data.forEach( (value) => {sum = sum + value} )
  return sum;
}

var waySecond = function(data) {
  var sum = 0;
  data.forEach( (value, i) => {
    i % 2 === 0 ?  sum = sum + value : false
  })
  return sum;
}

var wayThird = function(data) {
  var sum = 0;
  var iTemp = 0
  data.forEach( (value, i) => { 
    if (!iTemp || iTemp + 4 === i)  { 
      sum = sum + value;
      iTemp === 0 ? iTemp = 1 : iTemp = i;
    } 
  })
  return sum;
}

console.log(wayFirst(initialData));
console.log(waySecond(initialData))
console.log(wayThird(initialData))


сделал через forEach но через reduce было бы немного компактнее

или если надо получать не значения а засумированные элементы с интервалом
const initialData = [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]

let sumArrayWithInterval = (data, interval) => { 
  const sumWithIntervel = []; 
  let next = 0;
  data.forEach((value, i) => {
    if (next === i) { 
      const valueIndex = interval === 1 ? 1 + i : interval + 1 + i;
      
      data[valueIndex] ? sumWithIntervel.push(value + data[valueIndex]) : false
      interval === 1 ? next = i + interval + 1 : next = valueIndex + 1
    }
  })
  return sumWithIntervel;
}
console.log(
      sumArrayWithInterval(initialData, 1)
);

console.log( 
    sumArrayWithInterval(
      sumArrayWithInterval(initialData, 1)
    , 2)
);

console.log( 
  sumArrayWithInterval(
    sumArrayWithInterval(
      sumArrayWithInterval(initialData, 1)
    , 2)
  , 4)
);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@tomatho
Рекомендую делать это днём.
Открываешь шторы окна, чтобы было посветлее.
Можешь дополнительно включить свет.
Берёшь, высыпаешь весь массив на стол.
Пальцами одни элементы отодвигаешь от других.
Смотришь, чтоб элементы были хорошие.
Ну и хорошие прямо со стола пальцем кидаешь в кастрюлю.

А если серьёзно, то сначала сформулируйте понятнее.
Ответ написан
Комментировать
@nirvimel
Помогите)

Надевайте спасательный круг и гребите к берегу.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы