Немного трудно понять, что именно не так с вашим кодом; Я бы предположил, что одной из основных проблем может быть то, как вы используете snacks.hasOwnProperty()
.
Object.hasOwnProperty
, принимает аргумент, который является ключом, и возвращает логическое значение. Таким образом, в вашем примере код должен выглядеть более похоже на snacks.hasOwnProperty(snack)
, который будет проверять, имеет ли объект snacks
свойство snack
.
Как вы храните данные, зависит от вас, и вы Вы достаточно близки к тому, чтобы заставить его работать. Следует отметить, что snacks.key
попытается получить свойство key
snacks
, что, вероятно, не то, что вы хотели здесь сделать. Вместо этого что-то вроде snacks[snack]
могло бы быть более подходящим. Вы можете использовать либо точечную нотацию, либо нотацию в квадратных скобках, чтобы получить свойства объектов.
С учетом всего сказанного ниже приведен код, который может проиллюстрировать несколько новых концепций, надеюсь, без быть слишком абстрактным Не беспокойтесь о функция стрелок с; они в основном такие же, как обычные функции, только с другим синтаксисом.
То, что я настроил ниже, позволит вам иметь обобщенную c функцию getSnack
, которая будет определять, какую функцию она должна используйте, чтобы получить правильные данные закуски. Это означает, что вам не нужно беспокоиться о том, как вы сохранили данные закусок в момент использования.
С тех пор код действительно очень похож на то, что у вас есть; другая концепция, которую мы здесь представляем, - это деструктуризация массива , которая очень интересна для изучения и может немного сэкономить на синтаксисе.
Надеюсь, это поможет, пожалуйста, задавайте любые вопросы.
const snacks = {
"Espresso": 1,
"Cappuccino": 2.50,
"Chocolate bar": 2,
"Potato Chips": 3.50
};
const snacksArray = [
["Espresso", 1],
["Cappuccino", 2.50],
["Chocolate bar", 2],
["Potato Chips", 3.50]
];
const getSnackFromArray = (array, itemName) => array
.find(x => x[0] === itemName)
const getSnackFromObject = (snackDataObject, itemName) => (
snackDataObject.hasOwnProperty(itemName)
? [itemName, snackDataObject[itemName]]
: undefined
)
const getSnack = (data, itemName) => Array.isArray(data)
? getSnackFromArray(data, itemName)
: getSnackFromObject(data, itemName)
const vendingMachine = (snack, cash) => {
const snackData = getSnackFromObject(snacks, snack);
if (snackData === undefined) {
console.log(snack + " does not exist. Please try again.")
return;
}
const [snackName, cost] = snackData;
if (cash >= cost) {
console.log("Your " + snack + " have been served")
} else {
console.log("Insufficient funds. Please insert more cash.")
}
}
vendingMachine('Espresso', 1.1)
vendingMachine('Espresso', 1)
vendingMachine('Espresso', 0.9)
vendingMachine('Expresso', 0.9)