首页 > 解决方案 > 多维数组给出“错误”的答案

问题描述

我从编码开始,我有一个多维数组的例子。但它没有给出预期的答案。

我只得到'C',我期待“JohnnyCash:住在佛森监狱”。怎么了?

var music = []
    music[0] = "Country";
    music[1] = "Rock";
    music[2] = "Punk";
    music[0][0] = "JohnnyCash:Live at Folsom Prison";
    music[0][1] = "PatsyCline:Sentimentally Yours";
    music[0][2] = "HankWilliams:I'm Blue Inside";
    music[1][0] = "T-Rex:Slider";
    music[1][1] = "Nirvana:Nevermind";
    music[1][2] = "Lou Reed:Tranformer";
    music[2][0] = "Flipper:Generic";
    music[2][1] = "TheDeadMilkmen:Big Lizard in my Backyard";
    music[2][2] = "PattiSmith:Easter";

    console.log(music[0][0]);

标签: javascriptarraysmultidimensional-array

解决方案


你有

music[0] = "Country";

所以当你到达这条线时:

music[0][0] = "JohnnyCash:Live at Folsom Prison"

music[0]is "Country"(因为之前的赋值),so music[0][0]is"C"并且因为字符串是不可变的,music[0][0]所以不允许赋值。

如果你想在 处有一个数组music[0],你需要把一个数组放在那里,而不是一个字符串。

您可以一次创建该多维结构:

var music = [
    [
        "JohnnyCash:Live at Folsom Prison",
        "PatsyCline:Sentimentally Yours",
        "HankWilliams:I'm Blue Inside"
    ],
    [
        "T-Rex:Slider",
        "Nirvana:Nevermind",
        "Lou Reed:Tranformer"
    ],
    [
        "Flipper:Generic",
        "TheDeadMilkmen:Big Lizard in my Backyard",
        "PattiSmith:Easter"
    ]
];

您需要"Country"单独保存类别标签( 等)。一种方法是使用对象:

var music = [
    {
        label: "Country",
        entries: [
            "JohnnyCash:Live at Folsom Prison",
            "PatsyCline:Sentimentally Yours",
            "HankWilliams:I'm Blue Inside"
        ]
    },
    {
        label: "Rock",
        entries: [
            "T-Rex:Slider",
            "Nirvana:Nevermind",
            "Lou Reed:Tranformer"
        ]
    },
    {
        label: "Punk",
        entries: [
            "Flipper:Generic",
            "TheDeadMilkmen:Big Lizard in my Backyard",
            "PattiSmith:Easter"
        ]
    }
];

for (var i = 0; i < music.length; ++i) {
  var category = music[i];
  console.log(category.label + ":");
  for (var j = 0; j < category.entries.length; ++j) {
    console.log("* " + category.entries[j]);
  }
}
/* Make the Stack Snippets console full size */
.as-console-wrapper {
  max-height: 100% !important;
}

或者使用 ES2015+ 特性:

const music = [
    {
        label: "Country",
        entries: [
            "JohnnyCash:Live at Folsom Prison",
            "PatsyCline:Sentimentally Yours",
            "HankWilliams:I'm Blue Inside"
        ]
    },
    {
        label: "Rock",
        entries: [
            "T-Rex:Slider",
            "Nirvana:Nevermind",
            "Lou Reed:Tranformer"
        ]
    },
    {
        label: "Punk",
        entries: [
            "Flipper:Generic",
            "TheDeadMilkmen:Big Lizard in my Backyard",
            "PattiSmith:Easter"
        ]
    }
];

for (const category of music) {
  console.log(`${category.label}:`);
  for (const entry of category.entries) {
    console.log(`* ${entry}`);
  }
}
/* Make the Stack Snippets console full size */
.as-console-wrapper {
  max-height: 100% !important;
}


推荐阅读