Генерация if-else динамически в зависимости от того, больше ли введенное число, меньше или равно - PullRequest
5 голосов
/ 26 января 2020

У меня есть данные в этом формате:

HTML:

<div class="data-table">
  <div class="data-table-item" sign="<" val="10000" result="1"></div>
  <div class="data-table-item" sign=">=" val="10000" result="2"></div>
  <div class="data-table-item" sign=">=" val="25000" result="3"></div>
  <div class="data-table-item" sign=">=" val="50000" result="4"></div>
</div>

JS:

var user_Value = 26000;

Я пытаюсь сгенерировать if-else динамически, так что если пользователь вводит 26000, он должен дать мне Result = 3, обнаружив соответствующий атрибут знака.

Приведенная выше структура - Dynami c, поэтому я не могу использовать условия stati c if-else .

Вот JSFiddle

Пожалуйста, помогите.

Ответы [ 2 ]

2 голосов
/ 26 января 2020

Это возможно с помощью функции eval(), которая выполняет код JavaScript в виде строки

Попробуйте понять из кода ниже:

var userval = 26000;
$(".data-table").find("*").each(function(){
 var val = $(this).attr("val");
 var c = $(this).attr("sign");
 var exec = `${userval} ${c} ${val}`;
 console.log(exec);
 console.log(eval(exec));
 if(eval(exec)){
  $(this).text(userval);
 }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="data-table">
  <div class="data-table-item" sign="<" val="10000" result="1"></div>
  <div class="data-table-item" sign=">=" val="10000" result="2"></div>
  <div class="data-table-item" sign=">=" val="25000" result="3"></div>
  <div class="data-table-item" sign=">=" val="50000" result="4"></div>
</div>
0 голосов
/ 26 января 2020

Код, который вы написали, на самом деле не выполняет то, о чем просит ваш вопрос (ответ @ RiteshKhandekar делает то, о чем вы просили). Если вы предполагаете, что ваши скобки расположены в порядке возрастания, тогда ваш код работает, но, возможно, он не самый лучший. На самом деле ваше требование ближе к «найти последний элемент в отсортированном массиве, который меньше некоторой динамически выбранной цели».

Поскольку вы сказали, что ваша структура создается динамически, написание кода, который проверяет каждую возможность, не является идти на работу. Вам нужно создать что-то, способное работать с произвольными данными. Вы можете сделать это следующим образом:

// binary search implementation, since the data is sorted
function last(array, target) 
{  
    let start = 0
    let end = array.length-1;  

    let index = -1;  
    while (start <= end) {  
        let mid = ~~((start + end) / 2);
        if (array[mid] >= target) {  
            end = mid - 1;  
        }  
        else {  
            index = mid;  
            start = mid + 1;  
        }  
    }  
    return index
}

let divs = $(".data-table>div")
let values = []

// Generate an array from the set of values in the HTML
divs.each(function(){
    values.push(parseInt(this.getAttribute('val')) )
})

// find the last index smaller than the target value
let index = last(values, 26000)
// add error checking for index == -1
// do something with the index
console.log(divs.get(index).getAttribute('result'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="data-table">
  <div class="data-table-item" sign="<" val="10000" result="1"></div>
  <div class="data-table-item" sign=">=" val="10000" result="2"></div>
  <div class="data-table-item" sign=">=" val="25000" result="3"></div>
  <div class="data-table-item" sign=">=" val="50000" result="4"></div>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...