JavaScript嵌套包含字符串的数组

3

我有一个包含另一个数组和字符串的数组:

var text;
var languageSet = ["Language4", "Language5"];
var languages = [
        ["Language1", "Language2", "Language3"],
        languageSet,
        "Language6"
    ];

(function selector() {
    for (i = 0; i < languages.length; i++) {
        for (j = 0; j < languages[i].length; j++) {
            text += "<option value='" + languages[i][j] + "'>" + languages[i][j] + "</options>";
        }
    }
    document.getElementById("languageOptions").innerHTML = text;
})();

HTML:

<select id="languageOptions">
</select>

但是每次运行这个程序,"语言 6"的输出结果都是这样的:
L
a
n
g
u
a
g
e

6

我该如何将它作为一个完整的字符串输出?我不知道为什么我的代码不能处理嵌套数组中的字符串和数组。

2
你期望它是一个数组的数组 - 因此你的代码会像处理数组一样来处理字符串(这也可以工作,因为它具有“.length”和索引访问的“iterable”属性)。只需将字符串包装在一个数组中即可解决问题。 - Bergi
1
一个包含另一个数组和字符串的数组 - 然后你将不得不在代码中检查它是字符串还是数组。如果您可以保证数据格式合理(例如,字符串的数组数组),则无需检查。 - James
2个回答

2

您应该进行类型检查,以查看您的项目是否为数组,然后循环该数组。我在此处使用Array.isArray进行类型检查。代码示例可供您测试。

Array.isArray()方法返回true,如果一个对象是数组,否则返回false。

var text;
var languageSet = ["Language4", "Language5"];
var languages = [
        ["Language1", "Language2", "Language3"],
        languageSet,
        "Language6"
    ];


(function selector() {
    for (i = 0; i < languages.length; i++) {
      if (Array.isArray(languages[i])) {
        for (j = 0; j < languages[i].length; j++) {
          
            text += "<option value='" + languages[i][j] + "'>" + languages[i][j] + "</options>";
        }
      } else {
        text += "<option value='" + languages[i] + "'>" + languages[i] + "</options>";
      }
    }
    document.getElementById("languageOptions").innerHTML = text;
})();
<select id="languageOptions">
</select>


1

在循环内使用Array.isArray()函数来检查类型。

for (i = 0; i < languages.length; i++) {
    if(Array.isArray(languages[i])) {
       for (j = 0; j < languages[i].length; j++) 
          text += "<option value='" + languages[i][j] + "'>" + languages[i][j] + "</options>";
    } else {
       text += "<option value='" + languages[i] + "'>" + languages[i] + "</options>";
    }
}
document.getElementById("languageOptions").innerHTML = text;

谢谢。为什么我必须使用Array.isArray(),JS不知道languages已经是一个数组吗? - montybird
1
不,如果您没有使用isArray函数进行检查,甚至字符串也会被视为数组在循环中进行处理。一个简单的例子可以澄清您的疑惑。例如:var str = 'hello'; 被认为是字符数组加上字符串原型方法。0->h, 1->e 2->l 3->l 4->o ...我觉得您在这方面工作和经验越多,就会越清晰明了。 - rajuGT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接