Как высчитать уровень исходя из массива?

Ссылка скопирована
1 ответ

Добрый день!

Нужно реализовать подсчет уровня, исходя из количества заказов пользователя. Я реализовываю это так:

const LVLS = [   {exp: 10, lv: 1},   {exp: 25, lv: 2},   {exp: 45, lv: 3},   {exp: 70, lv: 4},   {exp: 100, lv: 5}, ]; const EXP = 47; let lvl = 0;  LVLS.forEach((l) => {   if(EXP >= l.exp) {     lvl = l.lv;   } });  console.log(lvl);

const LVLS = [ {exp: 10, lv: 1}, {exp: 25, lv: 2}, {exp: 45, lv: 3}, {exp: 70, lv: 4}, {exp: 100, lv: 5}, ]; const EXP = 47; let lvl = 0; LVLS.forEach((l) => { if(EXP >= l.exp) { lvl = l.lv; } }); console.log(lvl);

Все работает, но кажется, что достаточно криво. Как можно переделать это во что-то более красивое, подскажите, пожалуйста?

Дополнительно:

const LVLS = [     {exp: 10, lv: 1},     {exp: 25, lv: 2},     {exp: 45, lv: 3},     {exp: 70, lv: 4},     {exp: 100, lv: 5}, ]  console.log(LVLS.reduce((acc, l) => (47 >= l.exp ? l.lv : acc), 0)); // 3

const LVLS = [ {exp: 10, lv: 1}, {exp: 25, lv: 2}, {exp: 45, lv: 3}, {exp: 70, lv: 4}, {exp: 100, lv: 5}, ] console.log(LVLS.reduce((acc, l) => (47 >= l.exp ? l.lv : acc), 0)); // 3

Все работает, но кажется, что достаточно криво.

Теперь ровнее.

  • Спасибо огромное, так намного лучше.
    Стоит подучить мне reduce : )
  • Nichosi, вообще, если все работает так, как задумано и не жмет, то лучше не трогать

работает, но кажется, что достаточно криво

Да, криво - всегда перебирается весь массив.

Можно идти от конца к началу до тех пор, пока не встретится подходящий элемент:

let lvl = 0;  for (let i = LVLS.length; i--; ) {   if (LVLS[i].exp <= EXP) {     lvl = LVLS[i].lv;     break;   } }

let lvl = 0; for (let i = LVLS.length; i--; ) { if (LVLS[i].exp <= EXP) { lvl = LVLS[i].lv; break; } }

переделать это во что-то более красивое

const lvl = LVLS.findLast(n => n.exp <= EXP)?.lv ?? 0;

const lvl = LVLS.findLast(n => n.exp <= EXP)?.lv ?? 0;

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

const LVLS = [ 10, 25, 45, 70, 100 ];  const lvl = 1 + LVLS.findLastIndex(n => n <= EXP);

const LVLS = [ 10, 25, 45, 70, 100 ]; const lvl = 1 + LVLS.findLastIndex(n => n <= EXP);

Ответы:

const level = Math.floor((Math.sqrt(56.25 + 10 * EXP) - 7.5) / 5);

const level = Math.floor((Math.sqrt(56.25 + 10 * EXP) - 7.5) / 5);

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Мария Код Ответ

Для вычисления уровня исходя из массива вам нужно определить критерии, по которым будет происходить оценка каждого элемента массива. Например, если у вас есть массив с баллами за различные задания, то вы можете использовать следующий метод:

1. Создайте переменную, в которой будет храниться общее количество баллов.
2. Пройдитесь по каждому элементу массива и добавьте его значение к общему количеству баллов.
3. Определите базовый уровень (например, 0 баллов - начальный уровень).
4. Определите интервалы баллов для каждого уровня (например, 0-10 баллов - уровень 1, 11-20 баллов - уровень 2 и т.д.).
5. Сравните общее количество баллов с интервалами уровней и определите соответствующий уровень.

Пример кода на PHP:

$points = [5, 8, 12, 18, 25]; // массив с баллами за задания
$totalPoints = array_sum($points); // общее количество баллов
 
$baseLevel = 0; // базовый уровень
$levels = [ // интервалы для каждого уровня
    ['min' => 0, 'max' => 10, 'level' => 1],
    ['min' => 11, 'max' => 20, 'level' => 2],
    ['min' => 21, 'max' => 30, 'level' => 3],
    // добавьте другие уровни по аналогии
];
 
$currentLevel = $baseLevel; // установим базовый уровень по умолчанию
 
foreach ($levels as $level) {
    if ($totalPoints >= $level['min'] && $totalPoints <= $level['max']) {
        $currentLevel = $level['level']; // установим уровень, если баллы попадают в интервал
        break;
    }
}
 
echo "Уровень: " . $currentLevel;

$points = [5, 8, 12, 18, 25]; // массив с баллами за задания $totalPoints = array_sum($points); // общее количество баллов $baseLevel = 0; // базовый уровень $levels = [ // интервалы для каждого уровня ['min' => 0, 'max' => 10, 'level' => 1], ['min' => 11, 'max' => 20, 'level' => 2], ['min' => 21, 'max' => 30, 'level' => 3], // добавьте другие уровни по аналогии ]; $currentLevel = $baseLevel; // установим базовый уровень по умолчанию foreach ($levels as $level) { if ($totalPoints >= $level['min'] && $totalPoints <= $level['max']) { $currentLevel = $level['level']; // установим уровень, если баллы попадают в интервал break; } } echo "Уровень: " . $currentLevel;

Этот код позволит вам вычислить уровень исходя из массива с баллами. Не забудьте настроить интервалы и базовый уровень в соответствии с вашими требованиями.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно