Como reduzir uma matriz de objetos de cordas preço

0

Pergunta

var groceries = [
  {
    id: 1,
    product: 'Olive Oil',
    price: '$' + 12.1
  },
  {
    id: 2,
    product: 'Tomato Soup',
    price: '$' + 3.48
  },
  {
    id: 3,
    product: 'Cheesecake',
    price: '$' + 17.36
  },
  {
    id: 4,
    product: 'Sirloin Steak',
    price: '$' + 14.8
  },
  {
    id: 5,
    product: 'Brie Cheese',
    price: '$' + 23.28
  }
];

var sum = _.reduce(products, function (total, price) {
    return total + price;
  }, 0);

Eu não estou tão certo como remover o '$' do que o preço antes de começar a adicionar os valores para cima. Eu tentei o meu melhor para olhar para outras soluções aqui (estou de novo), mas parece não ser apenas exemplos em que o "preço" são apenas números.

Desculpe se este um problema semelhante já foi postado em outro lugar, mas ainda estou aprendendo a navegar aqui, e eu ainda tenho que encontrar uma situação semelhante, a menos que alguém pode me apontar para ele!

integer javascript reduce string
2021-11-23 08:38:50
2

Melhor resposta

0

Aqui, eu usei o Javascript função padrão reduce para obter a soma cumulativa.

var groceries = [
  {
    id: 1,
    product: 'Olive Oil',
    price: '$' + 12.1
  },
  {
    id: 2,
    product: 'Tomato Soup',
    price: '$' + 3.48
  },
  {
    id: 3,
    product: 'Cheesecake',
    price: '$' + 17.36
  },
  {
    id: 4,
    product: 'Sirloin Steak',
    price: '$' + 14.8
  },
  {
    id: 5,
    product: 'Brie Cheese',
    price: '$' + 23.28
  }
];

//reduce((total, currentIteratedValue) => {}, initialCumulativeValue)
//Initially we take sum as 0
const sum = groceries.reduce(function (currentTotal, obj) {
  var price = parseFloat(obj.price.slice(1));
  if (!isNaN(price)) return currentTotal + price;  
  return currentTotal;
}, 0);


console.log(sum)

2021-11-23 09:52:50

isso funcionou! muito obrigado. Eu estava mal-entendido que o iterador parte..
kon
0

No código, o price que está a utilizar é o objeto para cada iteração com as propriedades da matriz. Em vez disso, você poderia levar o preço propriedade do objeto.

No seu exemplo, existem apenas levando $ que você pode remover a partir do preço de propriedade. Em seguida, você pode usar, por exemplo, parseFloat e adicionar apenas o valor, caso a conversão não produz NaN.

Em seguida, passe o groceries variável para reduzir, em vez de products que não está presente no código de exemplo.

Note que, atualmente, estamos adicionando valores de uma mesma moeda, e se você tiver diferentes moedas têm que dar conta de que, ao calcular a soma.

var groceries=[{id:1,product:'Olive Oil',price:'$'+12.1},{id:2,product:'Tomato Soup',price:'$'+3.48},{id:3,product:'Cheesecake',price:'$'+17.36},{id:4,product:'Sirloin Steak',price:'$'+14.8},{id:5,product:'Brie Cheese',price:'$'+23.28},{id:6,product:'Product with invalid price',price:'$'+"hello"}];

var sum = _.reduce(groceries, function (total, obj) {
  var price = parseFloat(obj.price.replace(/^\$/, ''));
  if (!isNaN(price)) {
    return total + price;  
  }
  return total;
}, 0);

console.log(sum)
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.2/underscore-min.js"></script>

2021-11-23 09:38:30

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................