Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Получить числа из строк значений свойств в объекте. (https://javascript.ru/forum/misc/67039-poluchit-chisla-iz-strok-znachenijj-svojjstv-v-obekte.html)

RoyalHunt 24.01.2017 16:17

Получить числа из строк значений свойств в объекте.
 
Здравствуйте, Друзья!

Нужна помощь... В голову не придет никак, ка можно это решить.

Есть следующая задача:

function fixAmount(amount) {
  
  return parseFloat(amount);
}


const orders = [
  { price: 21, amount: 4 },
  { price: 50, amount: '17 штук' },
  { price: 7, amount: '1,5 килограмма' },
  { price: 2, amount: ' 2.7 метра ' },
  { price: 1, amount: 'семь единиц' }
];


for (let order of orders) {
  let result = fixAmount(order.amount);
  console.log(`Заказ на сумму: ${result * order.price} Q`);
}


При этом нужно получить следующее значения:
Заказ на сумму: 84 Q
Заказ на сумму: 850 Q
Заказ на сумму: 10.5 Q
Заказ на сумму: 5.4 Q
Заказ на сумму: -1 Q

Изменять при этом можно только функцию fixAmount.
Помогите, пожалуйста.

nerv_ 24.01.2017 16:28

Если это тестовое задание -- написать ф-цию fixAmount, которая будет обладать соответствующим поведением.

Если это код с проекта, то у вас, ребята, проблемы со структурами данных)

RoyalHunt 24.01.2017 16:34

Это не проект. Это часть задания по курсам. Спрашивать препода - это жизнь ждать. Тут ребята поактивнее будут. Мне б понять как это можно реализовать, чтоб голова разобрала и дальнейшие задания начала делать... Спасибо за понимание!

return parseFloat(amount); я сам дописал. Только parseFloat игнорирует , и не выводит значение -1. Тут по идее следует indexOf применить. Но как ума не приложу

рони 24.01.2017 16:42

RoyalHunt,
function fixAmount(amount) {
  if(typeof amount == "string")  amount = amount.replace(',','.');
  return  parseFloat(amount)||-1;
}

RoyalHunt 24.01.2017 17:06

Цитата:

Сообщение от Rise (Сообщение 442169)
Откуда -1 что за математика? 1 * 7 = 7

Точнее было бы написать так: Только parseFloat игнорирует "," и не выводит значение -1

RoyalHunt 24.01.2017 17:19

Цитата:

Сообщение от Rise (Сообщение 442178)
RoyalHunt, причем здесь запятая из третьей цены если речь о пятой цене?

Вы правы... еще точнее было бы написать. parseFloat не будет корректно считать { price: 7, amount: '1,5 килограмма' }, так как в значении "запятая" и не будет выводить в качестве ответа -1 для { price: 1, amount: 'семь единиц' }

RoyalHunt 24.01.2017 17:24

Цитата:

Сообщение от рони (Сообщение 442170)
RoyalHunt,
function fixAmount(amount) {
  if(typeof amount == "string")  amount = amount.replace(',','.');
  return  parseFloat(amount)||-1;
}

Спасибо большое!

RoyalHunt 24.01.2017 17:30

Цитата:

Сообщение от Rise (Сообщение 442181)
Эти значения ты сам сочинил или в задании они так и указаны?

В задании так указано

RoyalHunt 24.01.2017 23:15

Цитата:

Сообщение от рони (Сообщение 442170)
RoyalHunt,
function fixAmount(amount) {
  if(typeof amount == "string")  amount = amount.replace(',','.');
  return  parseFloat(amount)||-1;
}


Можно уточнить почему не работает такой вариант, который вроде как является идентичным:


function fixAmount(amount) {
  if(amount === '')  amount = amount.replace(',','.');
  return  parseFloat(amount)||-1;
}

рони 25.01.2017 01:56

RoyalHunt,
1 вариант -- если данные строка переписать зяпятую на точку.
2 вариант (ваш) - если данные отсутствуют, у несуществующих данных переписать зяпятую на точку.
чем они одинаковы?


Часовой пояс GMT +3, время: 19:36.