@Quambaras

Как сложить с предыдущим значением и вернуть новое из массива с объектами?

есть такой массив
const arr = [
  {name: 'name1', value: 1, bool: true},
  {name: 'name1', value: 2, bool: true},
  {name: 'name1', value: 3, bool: false},
  {name: 'name1', value: 4, bool: true},
  {name: 'name1', value: 5, bool: true},
  {name: 'name1', value: 6, bool: false},
  {name: 'name1', value: 7, bool: true},
  {name: 'name1', value: 8, bool: true},
]

надо пробежаться по массив, те объекты у которых поле bool: false взять value объекта за ним, сложить с value у которого bool: false, если bool: true то вычитать предыдущий value объекта и вернуть пересчитанный массив. т.е. результат должен быть таким

const arr = [
  {name: 'name1', value: 1, bool: true},
  {name: 'name1', value: 1, bool: true},
  {name: 'name1', value: 4, bool: false},
  {name: 'name1', value: 0, bool: true},
  {name: 'name1', value: 5, bool: true},
  {name: 'name1', value: 11, bool: false},
  {name: 'name1', value: -4, bool: true},
  {name: 'name1', value: 12, bool: true},
]
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
WblCHA
@WblCHA
let prevValue = 0;
  const result = arr.map((obj) => ({
      ...obj,
      value: prevValue = obj.value + (obj.bool ? -prevValue : prevValue)
  }));
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Aetae
@Aetae Куратор тега JavaScript
Тлен
Циклы, мужик, используй циклы.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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