Вызов объекта в 2D-массиве

Если у меня есть массив вроде ...

outerArray = [
    middleArray1 = [
        innerArray1 = ['data'],
        innerArray2 = ['more data']
    ],
    middleArray2 = [
         ...more stuff...
    ]
];

Как я могу получить доступ к одному из внутренних массивов в javascript?

Это outerArray.middleArray1.innerArray1?

В вашем случае на самом деле это просто innerArray1. Но это потому, что ваше определение странное (вы назначаете внутри своего определения массива).

TiiJ7 22.06.2018 16:51

Ваша "вещь" на самом деле является трехмерным массивом, если он хотя бы один, потому что он больше похож на объект

Sebastian Speitel 22.06.2018 16:52

в вашем примере вы можете получить доступ к своему «среднему массиву» с помощью индекса, например outerArray [0] .... outerArray [N-1], но ваш синтаксис ... на самом деле странный

Margon 22.06.2018 16:53

Вы не можете получить доступ к массивам по свойствам. Для доступа к данным используйте скобки []. Сделайте console.info(outerArray); и посмотрите индексы каждого уровня.

Alex 22.06.2018 16:56

Это действительно то, как вы определили свои данные? Если это так, вам следует серьезно пересмотреть свое мнение. Если вместо этого вы пытаетесь просто описать структуру массива в этом формате, посмотрите, как создать Минимальный, полный и проверяемый пример и отредактировать вопрос с помощью реального кода. Это с большей вероятностью даст полезный ответ на ваш вопрос.

Fissure King 22.06.2018 16:57

В значительной степени вам следует просто избавиться от части именования / назначения в массиве (ах) (middleArray1 = ...), так как в любом случае он просто закончится индексами.

Matt 22.06.2018 16:59
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
6
114
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Прежде всего, это очень странный способ создания вложенных массивов, поскольку вы не сможете получить доступ к элементам массива с такими именами, как 'middleArray1', я пробовал это, но он не работает. Ведь массив будет доступен только в этом формате ...

outerArray = [
    [
        ['data'],
        ['more data']
    ],
    [
         ...more stuff...
    ]
];

Вы все еще можете получить доступ к внутренним элементам как outerArray[0][0] (innerArray1) или также

outerArray[0][0][0] (1-й элемент innerArray1)

Продолжая то, что сказал deadman.

Давайте разберем ваш многомерный массив на уровни.

  1. middleArray - это Level 1
  2. middleArray -> innerArray1 - это Level 2
  3. middleArray -> innerArray1 -> value - это Level 3

Например, для доступа к data у вас будет 3 уровня, что означает 3 скобки [].

Пример:


var data = outerArray[0][0][0] will output data.

var moreData = outArray[0][0][1] выведет more data.


outerArray[0] обращается к первому массиву на Level 1, который является middleArray1.

outerArray[1] обращается ко второму массиву на Level 1, который является middleArray2.

outerArray[0][0] обращается к первому массиву на Level 2, который является innerArray1.

и так далее.


Read over Creating a Multidimensional Array

Ваше заявление немного странно, как отметил TiiJ7. Обычно массив массивов выглядит примерно так:

const outerArray = [
    [
        [data],
        [moredata]
    ],
    [
        // more stuff
    ]
]

И вы должны вызвать каждый элемент по его индексу, например, outerArray [0] [0] [0]

Похоже, что вам действительно нужен объект.

const dataObj = {
    middleObj1: {
        innerObj1: [data],
        innerObj2: [moredata]
    },
    middleObj2: {
        // more stuff
    }
}

Его можно вызвать по ключу, а не только по индексу. То есть вы можете выбрать использование dataObj ['middleObj1'] ['innerObj1'] [0] или dataObj.middleObj1.innerObj1 [0]

Обратите внимание, что в обоих случаях я все еще заканчиваю индексом. Это потому, что в моем примере я сохранил ваш самый внутренний массив. Вы можете вкладывать массивы в объекты. На самом деле массивы ЯВЛЯЮТСЯ особым типом объектов в JavaScript. JavaScript просто использует общие объекты вместо многомерных массивов.

Ответ принят как подходящий

Вы на самом деле не сказали нам, что вы здесь пытаетесь сделать, но я подозреваю, что вы смешиваете объекты, которые используют {} и имеют доступ к свойствам, например outerArray.middleArray1, и массивы, которые определены с помощью [] и доступны по индексу: outerArray[0].

Вы пример вроде работает, потому что присваивания возвращают присвоенное значение. Это означает что-то вроде:

middleArray1 = [
    innerArray1 = ['data'],
    innerArray2 = ['more data']
]

такой же как:

middleArray1 = [['data'],['more data']]

с побочным эффектом, что innerArray1 и innerArray2 определяются как глобальные переменные. Например:

outerArray = [
    middleArray1 = [
        innerArray1 = ['data'],
        innerArray2 = ['more data']
    ],
    middleArray2 = [
        ' ...more stuff...'
    ]
];

// log global variable innerArray1 (probably not what you want)
console.info(innerArray1)

// access ith index:
console.info(outerArray[0][0])

Это почти наверняка не то, что вам нужно. Если вы хотите получить доступ к данным с такими свойствами, как outerArray.middleArray1, вам необходимо определить объект. Например:

// use {} to define object literal
outerArray = {
        middleArray1: {
            innerArray1: 'data',
            innerArray2: 'more data',
        },
        middleArray2: ' ...more stuff...'
 };
 
 // now access by property name
 console.info(outerArray.middleArray1.innerArray1)

Конечно, вы, вероятно, захотите использовать лучшее соглашение об именах для своих свойств ...

Спасибо, это именно то, что мне нужно! Да, я смешивал предметы, как ты сказал.

Soup 22.06.2018 17:12

Другие вопросы по теме