2017-01-07 3 views
2

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

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

var group = []; 
 
var alphabetArray = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''); 
 
alphabetArray.forEach(function(letter) { 
 
    group[letter] = group[letter] || []; 
 
    group[letter].push({ 
 
    key: letter, 
 
    letter 
 
    }); 
 
}); 
 
console.log(group);

+0

"группировать их по первой буквы" - что вы имеете в виду? какой-то вид? –

+0

Исходный массив - это массив, содержащий данные пользователя – Peter

+0

Просьба представить ожидаемый результат для строки ввода 'AB', только для первых двух символов. Я до сих пор не знаю, что именно вы ищете. –

ответ

2

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

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

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


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

+0

Ну, имена не целые (в том, что они не цифры), но достаточно близко. Это строки, состоящие из ряда цифр, обозначающих целое число в каноническом формате, числовое значение которого 'i' находится в диапазоне' +0 ≤ i <2^32-1'. :-) –

1

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

Массив ожидает ИНТАС индекса, объект может принимать строку

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

+0

Это работает до того момента, когда я хочу перебирать его в Angular 2 с ngFor – Peter

+1

. Вы действительно должны упомянуть, что это вопрос [XY-problem] (http://meta.stackexchange.com/questions/ 66377/что-это-The-ху-проблема) –

0

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

var alphabetArray = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''); 
 
var group = alphabetArray.map(function(letter) { 
 
    return { 
 
    [letter]: letter 
 
    }; 
 
}); 
 
console.log(group);

Смежные вопросы