Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.03.2018, 13:40
Аспирант
Отправить личное сообщение для weirdjava Посмотреть профиль Найти все сообщения от weirdjava
 
Регистрация: 01.03.2017
Сообщений: 40

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

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

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>
Ответить с цитированием
  #2 (permalink)  
Старый 26.03.2018, 14:41
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 29,047

weirdjava,
Массив: перебирающие методы
Ответить с цитированием
  #3 (permalink)  
Старый 26.03.2018, 14:45
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

weirdjava,
И убрать ошибки
Ответить с цитированием
  #4 (permalink)  
Старый 26.03.2018, 14:50
Аспирант
Отправить личное сообщение для weirdjava Посмотреть профиль Найти все сообщения от weirdjava
 
Регистрация: 01.03.2017
Сообщений: 40

Dilettante_Pro,
о каких ошибках идет речь? не заметил
Ответить с цитированием
  #5 (permalink)  
Старый 26.03.2018, 14:56
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 29,047

Сообщение от 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;
}
Ответить с цитированием
  #6 (permalink)  
Старый 26.03.2018, 15:03
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Сообщение от weirdjava
о каких ошибках идет речь? не заметил
Имя функции в HTML и скрипте, имя массива в функции
Ответить с цитированием
  #7 (permalink)  
Старый 26.03.2018, 15:06
Аспирант
Отправить личное сообщение для weirdjava Посмотреть профиль Найти все сообщения от weirdjava
 
Регистрация: 01.03.2017
Сообщений: 40

Dilettante_Pro,
рони,
понял,спасибо большое
Ответить с цитированием
  #8 (permalink)  
Старый 26.03.2018, 15:34
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 29,047

поиск ближайшего элемента в массиве
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>
Ответить с цитированием
  #9 (permalink)  
Старый 02.04.2018, 22:38
Аспирант
Отправить личное сообщение для weirdjava Посмотреть профиль Найти все сообщения от weirdjava
 
Регистрация: 01.03.2017
Сообщений: 40

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
HTML5 Как сделать, чтобы можно было двигать картинку мышью? Бобр Общие вопросы Javascript 2 18.06.2010 20:22
Можно ли сделать выбор имени запускаемого js скрипта из <select> super28 Общие вопросы Javascript 6 12.12.2009 21:22
Два accordion на сайт, можно как то сделать? Vitaly jQuery 3 09.11.2009 10:37
Можно ли сделать так... Абум Общие вопросы Javascript 1 04.07.2009 17:49
Может кто подсказать как можно сделать submit из левого фрейма в правый maxander Internet Explorer 1 28.11.2008 09:15