将对象推送到数组有时不起作用

时间:2014-11-07 19:44:55

标签: javascript jquery arrays select

我有以下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

3 个答案:

答案 0 :(得分:3)

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

var regions = {};


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

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

答案 1 :(得分:1)

这里的一切看起来都很正确。因为regions是一个数组,所以它由索引访问,而不是由键访问。但是,你可以实现你似乎试图用对象做的事情。

var regions = {};

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

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

答案 2 :(得分:0)

试试吧

var regions = [];

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