У меня есть массив с элементами, и я хочу сгруппировать их по первой букве, но когда я помещаю элемент в массив, он показывает пустой «Массив [0]», хотя в нем явно есть элементы.

Видимо, я делаю что-то не так, но понятия не имею, что.

var group = [];
var alphabetArray = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');
alphabetArray.forEach(function(letter) {
  group[letter] = group[letter] || [];
  group[letter].push({
    key: letter,
    letter
  });
});
console.log(group);
2
Peter 7 Янв 2017 в 12:01

3 ответа

Лучший ответ

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

Вы назначаете имена свойств, которые являются буквами .

Массивы не предназначены для хранения таких данных, и console.log не отображает эти свойства для массивов.


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

2
Quentin 7 Янв 2017 в 09:03

Вы хотите создать объект вместо массива. Измените [] на {}

Массив ожидает int как индекс, объект может принимать строку

var group = {}; // Object instead of Array
var alphabetArray = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');
alphabetArray.forEach(function(letter) {
  group[letter] = group[letter] || [];
  group[letter].push({
    key: letter,
    letter
  });
});
console.log(group);
1
mplungjan 7 Янв 2017 в 09:04

Я думаю, вы хотите преобразовать каждую букву в структуру. Если это так, вам нужно Array.map:

var alphabetArray = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');
var group = alphabetArray.map(function(letter) {
  return {
    [letter]: letter
  };
});
console.log(group);
0
Vasily Liaskovsky 7 Янв 2017 в 09:25