@boga-net

Как правильно создать многомерный массив/объект?

Всем привет. Что-то я запутался. Всё началось с того, что я решил объединить несколько массивов в один, чтобы получать число всех массивов. Для того, чтобы - добавился новый массив с категорией - кое-что произошло.
Нужен многомерный массив или объект и его правильное создание - за этим я и здесь.

В массиве должны быть : название группы, например - fruits, ключ, например - Apple и значение ключа - ссылка куда-то в дебри интернета.

var array : {
  fruits : {
    Apple: 'http://...png',
    Banana: 'http://...png'
  },
  vegetables : {
    Carrot : 'http://...png',
    Onion : 'http://...png'
  }
};


Группы : fruits, vegetables - будут использоваться (эти ключи будут перебираться в цикле), как их число (length), так и имя.
Ключи и значения каждого массива тоже будут использоваться, поэтому количество ключей тоже нужно.
Но пока это объект, как я понимаю, он не содержит числовые индексы, поэтому свойство length недоступно. Я не могу посмотреть сколько ключей в fruits. Без заморочек. В смысле, чтобы получать его свойство length без выкрутасов, а просто : array.fruits.length.

и тут-то я запнулся, потому что не работал с такими многомерными ассоциативными объектами.
И не пойму, как же правильно создать такой объект/массив, чтобы и просто, и читабельно и как обычно получать длину?

Методом тыка я пришёл к такому варианту :

var array = {
  fruits : [
    ['Apple', 'http://...png'],
    ['Banana', 'http://...png'],
    ['Kiwi', 'http://...png']
  ],
  vegetables : [
    ['Carrot', 'http://...png'],
    ['Onion', 'http://...png']
  ]
};


Но что-то засомневался...
Потом полез в гугл, но отчаялся и вернулся сюда )

Или так ?
var array : {
  fruits : {
    Apple: 'http://...png',
    Banana: 'http://...png'
  },
  vegetables : {
    Carrot : 'http://...png',
    Onion : 'http://...png'
  }
};


Или так ?
var array = [
  fruits = [
    ['Apple', 'http://...png'],
    ['Banana', 'http://...png']
  ],
  vegetables = [
    ['Carrot', 'http://...png'],
    ['Onion', 'http://...png']
  ]
];


Или как-то ещё ? В общем, как правильно будет создать такую штуку ? Или проще остановиться на нескольких массивах, не объединяя их в один ? Например вот так :

var fruits = [
  {
    src: 'http://.png',
    data : 'Apple'
  },
  {
    src : 'https://.png',
    data : 'Banana'
  },


Меня интересует компактность, читабельность, доступность ключей и значений для перебора и доступ к длине массива. Чтоб кошерно было

Спасибо
  • Вопрос задан
  • 219 просмотров
Решения вопроса 2
rockon404
@rockon404
Frontend Developer
Можно так:
var data = {
  fruits : [
    {
      src: 'http://.png',
      data : 'Apple'
    },
    {
      src : 'https://.png',
      data : 'Banana'
    }
  ],
  vegetables : [
    {
      src: 'http://.png',
      data : 'Carrot'
    },
    {
      src : 'https://.png',
      data : 'Potato'
    }
  ]
};

var groups = Object.keys(data);

console.log(groups); // ['fruits', 'vegetables']
Ответ написан
@Lebed71
Node.js Developer
Как мне кажется, если так нужно хранить все в одной сущности, то разумно обойтись массивом объектов, где в каждом объекте будет тип этого объекта, т.е. -
var array = [
{
type: “fruit”,
sort: “apple”
},
{
type: “vegetable”,
sort: “cucumber”
}];

Двумерные массивы не очень удобный вариант для обработки и хранения.

Но лично я бы сделал два массива и не мучайся бы, ибо незачем мешать сущности)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
profesor08
@profesor08 Куратор тега JavaScript
Многомерный массив: [[],[],[[],[],[]],]

Если ты хочешь легко гонять циклы, то делай массив. Если хочешь доступ по ключам, то объект. ПО объекту тоже можно итеррировать for...in.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы