Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как написать проверку значения select с массивом? (https://javascript.ru/forum/misc/61026-kak-napisat-proverku-znacheniya-select-s-massivom.html)

angelzzz 01.02.2016 10:28

Как написать проверку значения select с массивом?
 
Добрый день!

Только начал изучение js/jquery (если честно, не всегда понимаю где что), а программировал в последний раз лет 15 назад на бейсике в школе.

Есть значения в теге select:

<select id="myselect">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>


Есть ассоциативный массив в js

var arr = [
{key:1, val:123, val2:1},
{key:2, val:223, val2:2},
{key:3, val:323, val2:2},
{key:4, val:423, val2:1}
],

Получаю значение

$( "#myselect option:selected" ).text();


Как получить значения val и val2 если если значение key совпадает со значением select и сохранить это в переменную?

рони 01.02.2016 10:36

angelzzz,
в каком формате должен быть результат?

angelzzz 01.02.2016 10:48

Логика такая: Если значение select равно значению key массива arr, то Xval равно значению val соответствующему этому key, а значение Xval2 равно значение val2 соответствующему этому key.

То есть мне нужно получить val и val2 чтобы затем их использовать в вычилсениях

рони 01.02.2016 10:48

angelzzz,
формат это то что в s
в переменной s находится массив из двух элементов с нужными значениями
<!DOCTYPE HTML>

<html>

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

  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
  <script>
   $(function(){
var arr = [
{key:1, val:123, val2:1},
{key:2, val:223, val2:2},
{key:3, val:323, val2:2},
{key:4, val:423, val2:1}
], obj = {}, s;
Object.keys(arr).forEach(function (a) {
  var el = arr[a];
  obj[el.key] = [el.val,el.val2];
});

$("#myselect").on("change", function() {
  s = obj[this.value];
  $("p").html(s.join(" - "))
}).change()

   })
  </script>
</head>

<body>
<p></p>
<select id="myselect" >
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>

</body>

</html>

рони 01.02.2016 10:52

angelzzz,
или такой формат результата - здесь переменные a и b
<!DOCTYPE HTML>

<html>

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

  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
  <script>
   $(function(){
var arr = [
{key:1, val:123, val2:1},
{key:2, val:223, val2:2},
{key:3, val:323, val2:2},
{key:4, val:423, val2:1}
], obj = {}, a,b;
Object.keys(arr).forEach(function (a) {
  var el = arr[a];
  obj[el.key] = [el.val,el.val2];
});

$("#myselect").on("change", function() {
  var s = obj[this.value];
  a = s[0];
  b = s[1];
  $("p").html(a+ " - " + b)
}).change()

   })
  </script>
</head>

<body>
<p></p>
<select id="myselect" >
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>

</body>

</html>

angelzzz 01.02.2016 11:46

Значит формат 2 переменные. Спасибо!

Попробую

angelzzz 01.02.2016 22:44

Можете объяснить эту конструкцию:

$(function(){
var arr = [
{key:1, val:123, val2:1},
{key:2, val:223, val2:2},
{key:3, val:323, val2:2},
{key:4, val:423, val2:1}
],


Этой просто объявляется массив, тут понятно

obj = {}, a,b;


Это специально идет через обычную запятую? что делает эта част? просто присваивается в переменную obj массив и два значения?

Object.keys(arr).forEach(function (a) {
  var el = arr[a];
  obj[el.key] = [el.val,el.val2];
});


Это видимо перебор? Тут идет сравнение со значением из select?

$("#myselect").on("change", function() {
  var s = obj[this.value];
  a = s[0];
  b = s[1];
  $("p").html(a+ " - " + b)
}).change()


Вот эта часть у меня выдает ошибку, видимо потому что это и так находится все в функции изменения которой стоят на on.change. Вот так выдает ошибку

var arr = [
{key:1, val:123, val2:1},
{key:2, val:223, val2:2},
{key:3, val:323, val2:2},
{key:4, val:423, val2:1}
], obj = {}, a,b;
Object.keys(arr).forEach(function (a) {
  var el = arr[a];
  obj[el.key] = [el.val,el.val2];
});
 
  var s = obj[this.value];
  a = s[0];
  b = s[1];
  $("p").html(a+ " - " + b)

рони 01.02.2016 23:07

Цитата:

Сообщение от angelzzz
var s = obj[this.value];

строка 12 нет у вас никакого this.value
var s = obj[1];

angelzzz 02.02.2016 09:34

Выдает ошибку
Uncaught TypeError: Cannot read property '0' of undefined
на строке a = s[0];

рони 02.02.2016 12:44

Цитата:

Сообщение от angelzzz
на строке a = s[0];

:blink:
var arr = [
{key:1, val:123, val2:1},
{key:2, val:223, val2:2},
{key:3, val:323, val2:2},
{key:4, val:423, val2:1}
], obj = {}, a,b;
Object.keys(arr).forEach(function (a) {
  var el = arr[a];
  obj[el.key] = [el.val,el.val2];
});

  var s = obj[1];
  a = s[0];
  b = s[1];
 alert(a+ " - " + b)


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