Angular получить SUM массива с условием другого ключа

Как я могу получить сумму массива, если sel1 или sel2 или sel3 == 1 из следующего массива?

[ 
  { "sel1": 0, "sel2": 1, "sel3": 0, "price": 10 }, 
  { "sel1": 0, "sel2": 1, "sel3": 0, "price": 15 }, 
  { "sel1": 1, "sel2": 0, "sel3": 1, "price": 20 }, 
] 

Если я хочу суммировать все «цены», моя функция выглядит так и работает нормально:

   this.sum = this.array.reduce(function(prev, cur) {
      return prev + cur.price;
    }, 0);

Можно ли изменить функцию, чтобы получить только сумму sel2?

Указанные вами данные не имеют смысла, пожалуйста, перепроверьте их.

Philipp Meissner 15.12.2020 08:59

Почему мой вопрос не имеет смысла? У меня есть массив с выбранными продуктами, и мне нужна только сумма нескольких из них. Вот и все.

SaschaK 15.12.2020 09:12

Не ваш вопрос, а данные вашего примера. Это просто недопустимая конструкция.

Philipp Meissner 15.12.2020 09:13

@SaschaK Массив должен быть в форме [ { 0: { с запятой в конце каждого объекта.

Marco 15.12.2020 09:19

Ладно, извини, поменял

SaschaK 15.12.2020 09:20
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
5
845
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете map свой массив данных превратить в массив только элементов sel2, а затем reduce их.

Примером такой карты будет

this.array.map(entry => entry.sel2) // This returns an array of 'sel2'
Ответ принят как подходящий

Вы можете использовать ключ, чтобы проверить, выбран ли этот элемент продукта. Тогда только сумма с текущей ценой. иначе вернуть прошлую накопленную цену.

const list = [
  { sel1: 0, sel2: 1, sel3: 0, price: 10 },
  { sel1: 0, sel2: 1, sel3: 0, price: 15 },
  { sel1: 1, sel2: 0, sel3: 1, price: 20 },
];
// item[key] === 1 to chek product is selected.
const price = (key, data = []) =>
  data.reduce((sum, item) => (item[key] === 1 ? sum + item.price : sum), 0);
console.info(price("sel3", list));
console.info(price("sel2", list));
console.info(price("sel1", list));

Привет, кажется, это то, что я искал. Если я добавляю код в свою функцию, она не возвращает мне сумму, она возвращает цену1цена2цена3. Может быть, вы можете поместить свой код в мой пример выше? Большое спасибо!

SaschaK 16.12.2020 11:22

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