我在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]
}
但这不是要走的路,因为每个字符串的元素数量不同。
我在这里做错了什么?我觉得这很简单:)
答案 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);