Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Чистое любопытство - можно ли сделать проще? (https://javascript.ru/forum/misc/80792-chistoe-lyubopytstvo-mozhno-li-sdelat-proshhe.html)

Bond 01.08.2020 23:16

Чистое любопытство - можно ли сделать проще?
 
Всем привет.
Собственно задача такая.
Есть массив заказов. В зависимости от того какой по счету заказ за него начисляется разный процент указанный в настройках.
Например от первого до 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));


Так то все работает, но вопрос - можно ли сделать лаконичней и проще?

рони 02.08.2020 07:33

Bond,
forEach или for break или some, зачем продолжать поиск если результат найден?

voraa 02.08.2020 08:41

Цитата:

Сообщение от рони
for break или some, зачем продолжать поиск если результат найден?

Тогда с конца надо искать. Тут ищется последний элемент, у которого el.numOrder <= q

рони 02.08.2020 08:58

Цитата:

Сообщение от voraa
Тогда с конца надо искать.

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


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