【问题标题】:Pushing objects to array sometimes does not work将对象推送到数组有时不起作用
【发布时间】:2015-01-04 16:44:55
【问题描述】:

我有以下HTML

<select name="region-select" id="regions-select" class="form-control">
    <option selected=""> </option>
    <option value="23">Name1</option>
    <option value="24">Name2</option>
    <option value="25">Name3</option>
    <option value="28">Name4</option>
    <option value="33">Name5</option>
    <option value="35">Name6</option>
    <option value="213">Name7</option>
    <option value="9999">Name8</option>
    <!-- 200 elements... -->
</select>

我有以下JavaScript (jQuery)

var regions = [];

$("#regions-select > option").each(function() {
    regions.push({
        key:   this.value,
        value: this.text
    });
});

console.log(regions["213"]); // there is no such emelement
console.log(regions["9999"]); // there is no such emelement

几乎所有元素都存在于数组中。但其中一些没有。例如,regions with key == 213 and 9999

【问题讨论】:

  • 您想使用关联数组(使用{} 而不是[])。要将值插入其中,请使用regions[this.value] = this.text;
  • regions["213"] 暗示一个键,但您将其视为关联数组。

标签: javascript jquery arrays select


【解决方案1】:

你需要一个关联数组,你的数组没有索引 9999,除非它有超过 9998 个元素:

var regions = {};


$("#regions-select > option").each(function() {
    regions[this.value] = this.text;   
});

console.log(regions["213"]); // Name7
console.log(regions["9999"]); // Name8

【讨论】:

  • 您的代码运行良好。但是,为什么我的代码有时也能正常工作?
  • @denis 只要选项的值没有任何“跳跃”,您的代码就可以工作,也就是说,它们都是连续的。所以只有这样,数组索引才会与值具有相同的索引
【解决方案2】:

这里的一切看起来都是正确的。因为 region 是一个数组,所以它是通过索引而不是键来访问的。但是,您可以实现您似乎正在尝试对对象执行的操作。

var regions = {};

$("#regions-select > option").each(function() {
    regions[this.value] = this.text;
});

console.log(regions["213"]); 
console.log(regions["9999"]); 

【讨论】:

    【解决方案3】:

    试试看

    var regions = [];
    
    $("#regions-select > option").each(function(e) {
        regions.push({
            key:   $(e).val(),
            value: $(e).html()
        });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 2019-04-08
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      相关资源
      最近更新 更多