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

Populating a select element with comma-separated values using 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 循环完成的最后一次迭代。根据 here 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]
    }

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

知道我做错了什么吗?我觉得这很简单:)

当你声明 'options_key' 时,你没有初始化 it.so 它的值是 undefined 。当你连接 options_key += attr_split[i] 时。在第一次迭代中 options_key 成立undefined。所以只有你得到 undefinedAttr1Attr2Attr3

所以声明和初始化options_key喜欢。

var options_key="";

在你的循环中

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

每次将 options_key 替换为 attr_split[i] 的值。因此在循环之后它将包含最后一个元素 value.corrected 代码是

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

只需将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);