Я хочу создать форму калькулятора цен, которая печатает общую цену на основе таблицы цен. но слишком много ценовых вариаций.
.
как на картинке проверка по одному так:
if (type = "type1" && size = "22" && method = "method1" && width= = "150mm"){
totalPrice = 120;
}
трудно.
есть ли другой способ сделать такие вычисления, как поместить данные в массив JSON и выполнить итерацию по нему, чтобы получить цену.
Связано: Как упростить код для нескольких вложенных операторов if else.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Создайте объект базы данных и сохраните все данные в таком формате, чтобы их можно было получить на основе входного свойства.
используйте эту аналогию:
const database = {
"type1": {
"20ft": {
"method1": {
"150mm": "125$",
"200mm": "132$",
"250mm": "142$"
},
"method2": {
...
},
"method3": {
...
}
},
"21ft": {
...
}
},
"type2": {
...
}
}
// When you want to fetch the answer use call the variable like this
const answer = database?.["type1"]?.["20ft"]?.["method1"]?.["150mm"] || null;
Спасибо за ответ .. я тоже пытался сделать что-то подобное раньше. но не смог написать функцию вызова с несколькими переменными. это отлично сделает эту работу. еще раз спасибо
Этот метод возможен с использованием фильтра массива и карты
сохранить как get-price.js
const data = [
{
"type": "type1",
"size": "20ft",
"length": "150mm",
"method": "method1",
"price": "125$"
},
{
"type": "type1",
"size": "20ft",
"length": "150mm",
"method": "method2",
"price": "152$"
},
{
"type": "type1",
"size": "20ft",
"length": "150mm",
"method": "method3",
"price": "170$"
},
{
"type": "type1",
"size": "20ft",
"length": "200mm",
"method": "method1",
"price": "132$"
},
{
"type": "type1",
"size": "20ft",
"length": "200mm",
"method": "method2",
"price": "152$"
},
{
"type": "type1",
"size": "20ft",
"length": "200mm",
"method": "method3",
"price": "212$"
},
{
"type": "type1",
"size": "20ft",
"length": "250mm",
"method": "method1",
"price": "142$"
},
{
"type": "type1",
"size": "20ft",
"length": "250mm",
"method": "method2",
"price": "182$"
},
{
"type": "type1",
"size": "20ft",
"length": "250mm",
"method": "method3",
"price": "112$"
}
]
const getPrice = (type, size, length, method) => {
return (data
// filter matched condition
.filter(el => {
return el.type == type &&
el.size == size &&
el.length == length &&
el.method == method
})
// map return price and first item of array
.map (el => {
return el.price
})[0])
}
console.info(getPrice('type1', '20ft', '150mm', 'method3'))
console.info(getPrice('type1', '20ft', '150mm', 'method1'))
console.info(getPrice('type1', '20ft', '250mm', 'method2'))Результат
$node get-price.js
170$
125$
182$
Спасибо за ответ .. этот метод также отлично справляется со своей задачей. но массив данных будет иметь 360 объектов. использование фильтра и карты также дает мне другой способ. еще раз спасибо
Нет проблем, я также узнаю ваш вариант использования таблицы.
=— задание.==или===это сравнение