Как правильно отфильтровать массив в угловых

У меня есть сервисный лед, который извлекает массив из серверной части, мне нужно получить один элемент из массива на основе идентификатора, как мне это сделать в Angular?

Я ищу, как это сделать конкретно с угловыми конвейерами. Фильтр, как правило, просто останавливает работу без ошибок, если все сделано неправильно. Я могу получить информацию о строке, но я не могу настроить свойства, которые я получаю "Cannot read property 'id' of undefined"

4 ответа

Решение

Мне нужно получить один элемент из массива на основе идентификатора

попробуй с Array.find()

let data = yourArray.find(x => x.id == "en-gb");

или попробуйте с array().filter().shift()

Пожалуйста, пройдите это обсуждение ниже

Разница между find() и filter(). Shift() в JavaScript

операторы трубопровода

Я не совсем уверен, что вы имеете в виду под угловыми трубными операторами. У вас есть тэг rxjs-pipeable-operator в вашем вопросе, поэтому я ожидаю, что вы имеете в виду rxjs-операторы в целом.

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

У вас есть сервис, который возвращает Observable из массива. Что-то вроде этого:

function getMyData(): Observable<any[]> {
    return Observable.create(observer => {
        observer.next([
            { name: 'value 1', id: 1 },
            { name: 'value 2', id: 2 },
            { name: 'value 3', id: 3 }
        ]);

    });
}

Если вы хотите изменить значение в этом наблюдаемом потоке, вы не можете использовать фильтр или находить в потоке напрямую. Полученное вами значение является полным массивом, поэтому операция поиска выполняется для объекта массива, а не для отдельных элементов. То, что вы хотите сделать, это отобразить полученное значение и отфильтровать его в функции отображения.

getMyData()
    .map((theArray: any[]) => theArray.find(item => item.id === 2))

Для одного элемента из массива.

let selectedId = Array.find(a => a.id == 'fr-fr');
 this.booksByStoreID = this.books.filter(
      book => book.store_id === this.store.id);

Как мне отфильтровать массив с помощью TypeScript в Angular 2?

Другие вопросы по тегам