javascript - 多维数组给出“错误”的答案
问题描述
我从编码开始,我有一个多维数组的例子。但它没有给出预期的答案。
我只得到'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]);
解决方案
你有
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;
}
推荐阅读
- amazon-web-services - 参数名称的 AWS Cloudformation 嵌套堆栈参数类型不存在
- php - Guzzle http从json数组中获取单个值
- ruby-on-rails - 高山上的 ImageMagick 导致 minimagick 轨道出现奇怪的问题
- javascript - 使用 Shopify 变体下拉选择
- node.js - 在 Keycloak 中成功登录浏览器后,“500 错误:无法在仅承载模式下交换代码以获得授权”
- android - Android Intent.setClass 无法进入另一个活动
- powershell - ISE 与 CLI 中的 Powershell foreach 行为变化
- octave - 八度轴限制在绘图后变回自动
- php - TBS - 使用原生 sql 类使用新版 TBS 查询 SQL
- javascript - NodeJS MongoDB 处理和存储大量文本