Ответ 1
Вам нужно использовать метод Array.filter
:
this.persons = this.personService.getPersons().filter(x => x.id == this.personId)[0];
или Array.find
this.persons = this.personService.getPersons().find(x => x.id == this.personId);
У меня есть компонент и служба:
Компонент:
export class WebUserProfileViewComponent {
persons: Person [];
personId: number;
constructor( params: RouteParams, private personService: PersonService) {
this.personId = params.get('id');
this.persons = this. personService.getPersons();
console.log(this.personId);
}
}
Вам нужно использовать метод Array.filter
:
this.persons = this.personService.getPersons().filter(x => x.id == this.personId)[0];
или Array.find
this.persons = this.personService.getPersons().find(x => x.id == this.personId);
Предположим, у меня есть массив ниже:
Skins[
{Id: 1, Name: "oily skin"},
{Id: 2, Name: "dry skin"}
];
Если мы хотим получить предмет с Id = 1
и Name = "oily skin"
, мы попробуем, как показано ниже:
var skinName = skins.find(x=>x.Id == "1").Name;
Результат вернет skinName "Жирная кожа".
Пожалуйста, попробуйте, спасибо и с уважением!
Преобразование структуры данных в карту, если вы часто используете этот поиск
mapPersons: Map<number, Person>;
// prepare the map - call once or when person array change
populateMap() : void {
this.mapPersons = new Map();
for (let o of this.personService.getPersons()) this.mapPersons.set(o.id, o);
}
getPerson(id: number) : Person {
return this.mapPersons.get(id);
}
из TypeScript вы можете использовать собственный метод filter() массива JS:
let filteredElements=array.filter(element => element.field == filterValue);
он возвращает массив только с соответствующими элементами из исходного массива (0, 1 или более)
Ссылка:https://developer.mozilla.org/it/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
Используйте этот код в своей службе:
return this.getReports(accessToken)
.then(reports => reports.filter(report => report.id === id)[0]);
Попробуйте это
let val = this.SurveysList.filter(xi => {
if (xi.id == parseInt(this.apiId ? '0' : this.apiId))
return xi.Description;
})
console.log('Description : ', val );
Оптимальный вариант, еще не упомянутый в ответах выше, - это использовать .find
с функциями стрелок и деструктуризацией. Возьмите этот пример из MDN.
const inventory = [
{name: 'apples', quantity: 2},
{name: 'bananas', quantity: 0},
{name: 'cherries', quantity: 5}
];
const result = inventory.find( ({ name }) => name === 'cherries' );
console.log(result) // { name: 'cherries', quantity: 5 }