Как я могу получить сумму массива, если 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?
Почему мой вопрос не имеет смысла? У меня есть массив с выбранными продуктами, и мне нужна только сумма нескольких из них. Вот и все.
Не ваш вопрос, а данные вашего примера. Это просто недопустимая конструкция.
@SaschaK Массив должен быть в форме [ { 0: {
с запятой в конце каждого объекта.
Ладно, извини, поменял
Вы можете 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. Может быть, вы можете поместить свой код в мой пример выше? Большое спасибо!
Указанные вами данные не имеют смысла, пожалуйста, перепроверьте их.