Как уменьшить массив объектов со строковой ценой

0

Вопрос

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);

Я не совсем уверен, как удалить " $ " из цены, прежде чем мы начнем добавлять значения. Я изо всех сил старался найти здесь другие решения (я новичок), но, похоже, есть только примеры, где "цена" - это только цифры.

Извините, если эта аналогичная проблема уже была опубликована где-то еще, но я все еще учусь ориентироваться здесь, и мне еще предстоит найти подобную ситуацию, если только кто-нибудь не укажет мне на нее!

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

Лучший ответ

0

Здесь я использовал функцию Javascript по умолчанию reduce для получения совокупной суммы.

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

это сработало! Огромное спасибо!. Я неправильно понял часть итератора..
kon
0

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

В данных вашего примера есть только ведущие $ что вы могли бы удалить из свойства цены. Затем вы можете использовать, например, parseFloat и добавлять значение только в том случае, если преобразование не дает NaN.

Затем передайте groceries переменная для уменьшения вместо products которого нет в примере кода.

Обратите внимание, что в настоящее время мы добавляем значения в одной и той же валюте, и если у вас разные валюты, вам придется учитывать это при расчете суммы.

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

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................