Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.08.2020, 23:16
Профессор
Отправить личное сообщение для Bond Посмотреть профиль Найти все сообщения от Bond
 
Регистрация: 16.06.2013
Сообщений: 172

Чистое любопытство - можно ли сделать проще?
Всем привет.
Собственно задача такая.
Есть массив заказов. В зависимости от того какой по счету заказ за него начисляется разный процент указанный в настройках.
Например от первого до 4-го заказа оплачивается 5%, до 6го - 10%, до 8-го 20%, все остальные - 30%.

Я сделал это так
// Настройки  
const settings = [
	{numOrder: 4, percent: 10},
	{numOrder: 6, percent: 20},
	{numOrder: 8, percent: 30},
];

// Например сейчас это будет 5-й заказ
const quantity = 5;

// Функция которая определяет какой процент оплачивать 

const f = (q, sett) => {
	let res = 5; // По умолчанию 5% - это если заказов меньше чем первый элемент из настроек
	sett.forEach((el, i) => {
		if (el.numOrder <= q) {
			res = el.percent;
		}
	});
	return res;
}

console.log(f(quantity, settings));


Так то все работает, но вопрос - можно ли сделать лаконичней и проще?
Ответить с цитированием
  #2 (permalink)  
Старый 02.08.2020, 07:33
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 28,906

Bond,
forEach или for break или some, зачем продолжать поиск если результат найден?
Ответить с цитированием
  #3 (permalink)  
Старый 02.08.2020, 08:41
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 439

Сообщение от рони
for break или some, зачем продолжать поиск если результат найден?
Тогда с конца надо искать. Тут ищется последний элемент, у которого el.numOrder <= q
Ответить с цитированием
  #4 (permalink)  
Старый 02.08.2020, 08:58
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 28,906

Сообщение от voraa
Тогда с конца надо искать.
вроде без разницы ... искомое может быть ближе и к началу массива и к концу.
const f = (q, sett) => {
	let res = 5; // По умолчанию 5% - это если заказов меньше чем первый элемент из настроек
	sett.some(({numOrder, percent}, i) => {
		if (numOrder <= q) {
			res = percent;
		}
        else return true
	});
	return res;
}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли используя new FormData() сделать submit()? Artur_Hopf Общие вопросы Javascript 4 15.11.2019 15:16
Ближайший элемент.Как можно сделать проще ? weirdjava Events/DOM/Window 8 02.04.2018 22:38
HTML5 Как сделать, чтобы можно было двигать картинку мышью? Бобр Общие вопросы Javascript 2 18.06.2010 20:22
Можно ли сделать выбор имени запускаемого js скрипта из <select> super28 Общие вопросы Javascript 6 12.12.2009 21:22
Можно ли сделать так... Абум Общие вопросы Javascript 1 04.07.2009 17:49