使用 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);
我有一堆以逗号分隔的值作为字符串存储在 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);