Многомерный массив дает «неправильный» ответ - PullRequest
0 голосов
/ 02 февраля 2019

Я начинаю с кодирования, и у меня есть пример для многомерного массива.Но это не дает ожидаемого ответа.

Я получил только 'C' и ожидал "JohnnyCash: Live at Folsom Prison".Что не так?

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]);

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

У вас уже есть несколько полезных объяснений.Пошаговое построение массива также можно исправить с помощью следующих минимальных изменений:

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]);
0 голосов
/ 02 февраля 2019

У вас есть

music[0] = "Country";

и поэтому, когда вы попадете на эту строку:

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

music[0] равно "Country" (из-за более раннего назначения), поэтому 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...