JS Получить все значения value в массив

160
08 декабря 2021, 16:50

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

var mixedPictureSelect = document.getElementById("mixedPictureSelect"), 
  mixedPictures = mixedPictureSelect.children, 
  mixedPicturesLen = mixedPictures.length; 
 
var arr = []; 
 
for (var i = 0; i < mixedPicturesLen; i++) { 
  var val = mixedPictures[i].value; 
  arr = arr.push(val); 
} 
 
console.log("arr = " + arr);
<select name="mixedSelect" id="mixedPictureSelect" class="mix_workPlace__select"> 
  <option value="picture1" data-id="0">text1</option> 
  <option value="picture2" data-id="1">text2</option> 
  <option value="picture3" data-id="2">text3</option> 
  <option value="picture4" data-id="3">text4</option> 
</select>

не понимаю почему push в моем случаии е формирует новый массив из значений value option ?

Answer 1

.push - меняет массив, у которого вызывается, и возвращает новую длину.

Поэтому в данном случае не надо было присваивать результат выполнения той же переменной.

var mixedPictureSelect = document.getElementById("mixedPictureSelect"), 
  mixedPictures = mixedPictureSelect.children, 
  mixedPicturesLen = mixedPictures.length; 
 
var arr = []; 
 
for (var i = 0; i < mixedPicturesLen; i++) { 
  var val = mixedPictures[i].value; 
  arr.push(val); 
} 
 
console.log("arr = " + arr);
<select name="mixedSelect" id="mixedPictureSelect" class="mix_workPlace__select"> 
  <option value="picture1" data-id="0">text1</option> 
  <option value="picture2" data-id="1">text2</option> 
  <option value="picture3" data-id="2">text3</option> 
  <option value="picture4" data-id="3">text4</option> 
</select>

Новый массив возвращает метод .concat. Если его использовать вместо .push в текущем коде, то все заработает.

var mixedPictureSelect = document.getElementById("mixedPictureSelect"), 
  mixedPictures = mixedPictureSelect.children, 
  mixedPicturesLen = mixedPictures.length; 
 
var arr = []; 
 
for (var i = 0; i < mixedPicturesLen; i++) { 
  var val = mixedPictures[i].value; 
  arr = arr.concat(val); 
} 
 
console.log("arr = " + arr);
<select name="mixedSelect" id="mixedPictureSelect" class="mix_workPlace__select"> 
  <option value="picture1" data-id="0">text1</option> 
  <option value="picture2" data-id="1">text2</option> 
  <option value="picture3" data-id="2">text3</option> 
  <option value="picture4" data-id="3">text4</option> 
</select>

Answer 2
/*arr =*/ arr.push(val); // returns new length
READ ALSO
Как мне использоваться переменную из одного метода в другом

Как мне использоваться переменную из одного метода в другом

Задание "Описать класс, представляющий треугольникПредусмотреть методы для создания объектов, вычисления площади, периметра и точки пересечения...

123
Изменение цвета шапки меню при прокрутке к блоку с таким же цветом

Изменение цвета шапки меню при прокрутке к блоку с таким же цветом

Есть страница с блоками разных цветовЕсть меню, по клику на пункт которого, происходит прокрутка к соответствующему блоку

229
Упростить Promise Javascript

Упростить Promise Javascript

Есть код, он рабочийЯ новичок в промисах, можно ли как-то упростить его? Знаю, что сделал неправильно, второй промис можно как-то вынести отдельно

79
Перемножение ячеек таблицы JS

Перемножение ячеек таблицы JS

Как сделать так, что бы при перемножении ячеек таблицы 1 и таблицы 2, в таблицу 3 результат перемножения каждой ячейки выводился в ту же ячейку...

71