首页 > 解决方案 > 使用 .each() 填充数组,但第一个值显示为空

问题描述

所以我有一个选择,我将所有值和文本循环到一个数组中。

我不明白为什么这个数组的第一个值是空的?

var op = new Array();

$('select option').each(function() {
  if ($(this).val() !== '' && $(this).val() !== null) {
    op[$(this).val()] = $(this).text();
  }
});

console.log(op);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select>
  <option value="">select 1</option>
  <option value="1">select 2</option>
  <option value="2">select 3</option>
  <option value="3">select 4</option>
  <option value="4">select 5</option>
</select>

(5) [空,“选项1”,“选项2”,“选项3”,“选项4”]

1:“选项1”

2:“选项2”

3:“选项3”

4:“选项4”

这就是我从控制台得到的。

虽然我确实认为代码是正确的,但我只是不明白为什么第一个值是空的。

标签: javascriptjquery

解决方案


您正在使用选项值作为数组索引。由于没有选项,value="0"您在数组的该元素中没有任何值。

您可以直接推入数组,而不是使用该值作为索引。

    $('select option').each(function(){
        if ($(this).val() !== '' && $(this).val() !== null) {
            op.push($(this).text());
        }
    });

那么开头不会有空元素,但索引不会对应于值。

或者你可以创建op一个对象而不是一个数组。然后它将仅具有您添加的属性。


推荐阅读