使用for循环使用逗号分隔值填充select元素

时间:2015-03-11 06:14:23

标签: javascript arrays for-loop

我在JSON文件中将一堆以逗号分隔的值存储为字符串。我的目标是拆分这些值以填充基于Selectize.js的select元素。代码(摘录)如下所示:

var options = {};

var attr_split = data.attributes['Attribute1'].split(",");

var options_key;

for (var i = 0; i < attr_split.length; i++) { 
    options_key = attr_split[i]
    }

var options_values = {
    value: options_key,
    text: options_key,
    }

    if (options_key in options)
        options_values = options[options_key];
    options[options_key] = options_values;

$('#input').selectize({
    options: options,
});

尽管这似乎有效,但select元素中的输出仅显示for循环完成的最后一次迭代。根据{{​​3}} 和here,我试过了

for (var i = 0; i < attr_split.length; i++) { 
    var options_key += attr_split[i]
    }

但是根据以下示例,这会抛出未定义的加上没有分隔符的所有连接字符串:

undefinedAttr1Attr2Attr3

当我只是使用数组元素的手动输入测试循环时,一切看起来都很好:

for (var i = 0; i < attr_split.length; i++) { 
    var options_key = attr_split[0] || attr_split[1] || attr_split[2]
    }

但这不是要走的路,因为每个字符串的元素数量不同。

我在这里做错了什么?我觉得这很简单:)

2 个答案:

答案 0 :(得分:1)

当您声明&#39; options_key&#39; ,你没有初始化它。所以它的值是undefined。当你连接options_key += attr_split[i]时。在第一次迭代options_key持有undefined。所以只有你得到{{1} }。

声明并初始化undefinedAttr1Attr2Attr3之类的。

options_key

并在你的循环中

var options_key="";

每次使用for (var i = 0; i < attr_split.length; i++) { options_key = attr_split[i] } 的值替换options_key。所以在循环之后它将包含最后一个元素值.corrected code is

attr_split[i]

答案 1 :(得分:0)

只需将var options_key;更改为var options_key="";

即可

您未定义的原因是您没有正确定义变量。

这是一个工作示例

 var attr_split = "1,2,3,4".split(",");

var options_key="";

for (var i = 0; i < attr_split.length; i++) { 
    options_key += attr_split[i]
    }

    alert(options_key);
var options_values = {
    value: options_key,
    text: options_key
}
alert(options_values);
相关问题