как упорядочить строки в алфавитном порядке в typescript

#javascript #typescript #aurelia #alphabetical

#javascript #typescript #аурелия #алфавитный

Вопрос:

у меня есть следующая md-коллекция, которая загружает список электронных писем следующим образом

 <md-collection-item repeat.for="u of user" class="accent-text">
                            <div class="row">
                                <div class="col">
                                    <p>${findEmailAddress(u.email)}</p>
                                </div>          
                            </div>
                        </md-collection-item>
 

и в typescript

 findEmailAddress(userId: string) {
         return ((this.Persons|| []).find(x => x.userId == userId) || {}).email;
    
    }
 

он получает электронные письма для этого пользователя и отображает их следующим образом

 peaches@test.com
apple@test.com
pineapple@test.com
banana@test.com
 

как я могу заставить его загружать электронные письма в алфавитном порядке, например

 apple@test.com
banana@test.com
peaches@test.com
pineapple@test.com
 

я попытался использовать сортировку, как

 let test =((this.Persons|| []).find(x => x.userId == userId) || {}).email;
 return test.sort() ---> but it fails on sort and says "sort does not exists on type string"
 

Комментарии:

1. Ваша findEmailAddress(userId) функция возвращает электронную почту одного пользователя, а не список электронных писем всех пользователей, поэтому сортировать нечего.

Ответ №1:

Array#find функция возвращает первый элемент, который удовлетворяет условию.

Итак, в вашем коде

 let test =((this.Persons|| []).find(x => x.userId == userId) || {}).email;
 

test будет a string , а не array type , и именно по этой причине вы получаете текущую ошибку.

Чтобы отобразить отсортированные адреса электронной почты, вы должны отсортировать источник данных user .

Я предполагаю, что user это тип массива. Итак, в этом случае вы можете отсортировать его по email .

 const sorted = user.sort((a, b) => a.email - b.email)
 
 <md-collection-item repeat.for="u of sorted" class="accent-text">
 

Ответ №2:

В вашем примере test возвращает строку вместо массива. Сортировка должна вызываться для массива строк.

Сначала вы должны сделать так, чтобы эта строка была массивом. Предполагая, что тест содержит список адресов электронной почты, разделенных разрывами строк, вы можете попытаться разделить их с помощью разрыва строк, а затем отсортировать следующим образом:

 test.split("n").sort();
 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split