Не могу придумать нативный метод, который сделает это более элегантно, чем цикл по всем элементам в списке.Таким образом, производительность может быть проблемой, если у вас большое количество элементов или в медленных клиентских браузерах.
Принимая во внимание вышесказанное, вот один из подходов:
var length = input_1.length;
var groups = {};
for ( var i = 0; i < length; i ++ )
{
var item = input_1[ i ];
var firstChar = item.charAt( 0 );
groups[ firstChar ] = groups[ firstChar ] || [];
groups[ firstChar ].push( item );
}
Значение длины'рассчитывается извне как очень небольшая оптимизация в циклах - в противном случае JavaScript будет пересматривать длину массива каждый раз вокруг цикла.Кроме этого, конечный результат от входного массива строк состоит в том, что «группы» будут иметь ряд ключей / свойств, соответствующих всем используемым первым буквам входных строк, и каждый из этих ключей имеет, в качестве своего значения, массивсгруппированных строк.Сортировка не предпринимается.
Пример:
input_1 = [ "hello", "an", "cat", "hi", "henry", "thing", "anchor" ];
=> groups[ "a" ] is [ "an", "anchor" ]
groups[ "c" ] is [ "cat" ]
groups[ "h" ] is [ "hello", "hi", "henry" ]
groups[ "t" ] is [ "thing" ]