Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как выводить ответ из массива в зависимости от набранных очков? (https://javascript.ru/forum/misc/83340-kak-vyvodit-otvet-iz-massiva-v-zavisimosti-ot-nabrannykh-ochkov.html)

Katy93 19.11.2021 11:18

Как выводить ответ из массива в зависимости от набранных очков?
 
Как выводить ответ из массива в зависимости от набранных очков, ориентируясь от показателей min и max? У меня уже есть готовый пример, где сообщение выводится проверяя только одно число, если например количество очков ниже 16, то выводится “Описание 2”, выше 15 “Описание 1”, ниже 11 “Описание 3”, ниже 3 “Описание 4”.
Вот пример как это сделано на js?
<!DOCTYPE html>
<html lang="en">
<head>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.16.0/jquery.validate.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.maskedinput/1.4.1/jquery.maskedinput.min.js"></script>


</head>
<body>
<script type="text/javascript">
$(document).ready(function(e){
var N_LEV = 3;
var summa = 3;
     var mes = [[0,16,"Описание 1"],
               [0,11,"Описание 2"],
               [0,4,"Описание 3"],
               [0,3,"Описание 4"]];
  var i = 0;
  console.log(mes[i][1])
  while ((summa < mes[i][1]) && (i<N_LEV))
    i=i+1;
  
  $("#ball").html("Ваш балл: "+summa);  
  $("#test").html(mes[i][2]);
  
     
  });
</script>
<div id="ball"></div>
<div id="test"></div>
</html>
</body>

Здесь достаточно сложно разобрать, что означают эти цифры. Мне нужно сделать так, чтобы проверялись диапазон чисел, тоже самое что и в моем примере, только сравнение происходит между двумя цифрами min и max.

//999 – вместо бесконечности, чтобы обозначить больше 16.
//Первый элемент массива - это min, 
//второй max, 
//третий "ответ описание"

var mes = [[16,999,"Описание 1"],
               [11,15,"Описание 2"],
               [4,10,"Описание 3"],
               [0,3,"Описание 4"]];

Как проверять количество очков по диапазону?

рони 19.11.2021 11:51

Katy93,
var mes = [[16,"Описание 1"],
    [11,"Описание 2"],
    [4,"Описание 3"],
    [0,"Описание 4"]];

var n = 12;
var title = mes.find(([a]) => n >= a);
title = title ? title[1] : 'нет описания';
alert(title);

Katy93 19.11.2021 19:27

рони, Мой пример делает, тоже самое по одной переменной отображает результат, а мне нужно показывать результат по двум переменным min и max.
var mes = [[16,999,"Описание 1"],
               [11,15,"Описание 2"],
               [4,10,"Описание 3"],
               [0,3,"Описание 4"]];

Например если от 16 до 999, то выводится "описание 1",
если от 11 до 15 то "Описание 2" и т.д?

рони 19.11.2021 19:41

Katy93,
нет смысла в ваших диапазонах, так как где заканчивается один диапазон, там начинается другой. нужны только места(числа перехода).
Цитата:

Сообщение от Katy93
Например если от 16 до 999, то выводится "описание 1",
если от 11 до 15 то "Описание 2" и т.д?

что не так?
<script>
        var mes = [
            [16, "Описание 1"],
            [11, "Описание 2"],
            [4, "Описание 3"],
            [0, "Описание 4"]
        ];

        for (var n = 11; n <= 15; n++) {
            var title = mes.find(([a]) => n >= a);
            title = title ? title[1] : 'нет описания';
            document.write(`${n} : ${title} <br>`)
        }

        for (var n = 16; n <= 25; n++) {
            var title = mes.find(([a]) => n >= a);
            title = title ? title[1] : 'нет описания';
            document.write(`${n} : ${title} <br>`)
        }
    </script>

Katy93 20.11.2021 00:01

У меня в базе данных есть два поля min и max по ним идет сравнения какую запись показать, там уже достаточно записей внесено и если сравнивать только по одному значению, то придется менять структуры бд, а данные в массивах были взяты просто для примера.

рони 20.11.2021 00:16

Цитата:

Сообщение от Katy93
то придется менять структуры бд,

а зачем?
<script>
        var mes = [
            [16, 999, "Описание 1"],
            [11, 15, "Описание 2"],
            [4, 10, "Описание 3"],
            [0, 3, "Описание 4"]
        ];


        for (var n = 11; n <= 15; n++) {
            var title = mes.find(([a]) => n >= a);
            title = title ? title[2] : 'нет описания';
            document.write(`${n} : ${title} <br>`)
        }

        for (var n = 16; n <= 25; n++) {
            var title = mes.find(([a]) => n >= a);
            title = title ? title[2] : 'нет описания';
            document.write(`${n} : ${title} <br>`)
        }
    </script>

Katy93 22.11.2021 11:32

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


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