Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Ближайший элемент.Как можно сделать проще ? (https://javascript.ru/forum/events/73161-blizhajjshijj-ehlement-kak-mozhno-sdelat-proshhe.html)

weirdjava 26.03.2018 13:40

Ближайший элемент.Как можно сделать проще ?
 
Всем Привет!
Нарисовал метод который принимает два параметра arrayToEnter - не пустой массив целых чисел от -10000 до 10000 и valueToCheck {Number} число .
И должен возвращать ближайшее значение из массива arrayToEnter к valueToCheck. все работает,но моя имплементация далека от красоты:help:

не подскажите как можно сделать проще??

function nearestElement(arrayToEnter, valueToCheck){
 
  var arrA = arrayToEnter.split(",");
  for(var i in arrA){
    arrA[i] = parseInt(arrA[i],10);
  }
 
  var lengArr = arrS.length;
  var ans;
  var minN = -10000;
  var maxN = 10000;
  var tmp = Infinity;
  var res = document.getElementById("func_r");
 
  for(var i=0; i<=lengArr-1; i++){
    if((minN<=arrA[i])&&(arrA[i]<=maxN)){
      var m = Math.abs(valueToCheck - arrA[i]);
      if(m<tmp){
        tmp = m;
        ans = arrA[i];
      }
    }else{
      return res.innerHTML = "ERROR";
    }
  }
  return res.innerHTML = ans;
}


форма :
<body>
 
  <form action="" name="form">
  <input type="text" id="arrayToEnter" placeholder="Enter array in the format: 1,2,3,4 ..." style="width:230px">
  <input type="number" id="valueToCheck" placeholder="Enter number">
  <input type="button" value="OK" onclick="closestElement(document.getElementById('arrayToEnter').value, document.getElementById('valueToCheck').value)">
</form>
 
<div id="func_r"></div>
   
   
 
    <script  src="js/index.js"></script>
 
 
 
 
</body>

рони 26.03.2018 14:41

weirdjava,
Массив: перебирающие методы

Dilettante_Pro 26.03.2018 14:45

weirdjava,
И убрать ошибки

weirdjava 26.03.2018 14:50

Dilettante_Pro,
о каких ошибках идет речь? не заметил

рони 26.03.2018 14:56

Цитата:

Сообщение от weirdjava
for(var i in arrA){

не используют это для перебора массива
Цитата:

Сообщение от weirdjava
i<=lengArr-1;

зачем писать лишнее


function nearestElement(arrayToEnter, valueToCheck){

  var arrA = arrayToEnter.split(",");
  var lengArr = arrS.length;
  var ans;
  var minN = -10000;
  var maxN = 10000;
  var tmp = Infinity;
  var res = document.getElementById("func_r");

  for(var i=0; i < lengArr; i++){
    arrA[i] = parseInt(arrA[i],10);
    if((minN<=arrA[i])&&(arrA[i]<=maxN)){
      var m = Math.abs(valueToCheck - arrA[i]);
      if(m<tmp){
        tmp = m;
        ans = arrA[i];
      }
    }else{
      return res.innerHTML = "ERROR";
    }
  }
  return res.innerHTML = ans;
}

Dilettante_Pro 26.03.2018 15:03

Цитата:

Сообщение от weirdjava
о каких ошибках идет речь? не заметил

Имя функции в HTML и скрипте, имя массива в функции

weirdjava 26.03.2018 15:06

Dilettante_Pro,
рони,
понял,спасибо большое

рони 26.03.2018 15:34

поиск ближайшего элемента в массиве
 
weirdjava,
один из возможных вариантов, ошибка если совсем нет в прелагаемой строке чисел или числа вне диапазона.
элементы не сортируются!!!
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>


</head>

<body>
<div id="func_r"></div>
 <script>
function nearestElement(arrayToEnter, valueToCheck) {
    var minN = -10000;
    var maxN = 10000;
    var arrA = arrayToEnter.split(",");
    var ans = arrA.reduce(function(num, el) {
        el = parseInt(el, 10);
        if (!isNaN(el) && el >= minN && el <= maxN) {
            if (num == "ERROR") {
                num = el;
            } else {
                var m = Math.abs(valueToCheck - el);
                var n = Math.abs(valueToCheck - num);
                if (m < n) {
                    num = el;
                }
            }
        }
        return num;
    }, "ERROR");
    return ans;
};

var res = document.getElementById("func_r");
res.innerHTML = nearestElement("1,2,3,4,5", "3.9")

  </script>
</body>
</html>

weirdjava 02.04.2018 22:38

рони,
Dilettante_Pro,
Спасибо!Очень помогли!


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