У меня есть служба Angular, которая отправляет вызов службы данных и возвращает массив объектов, содержащих несколько уровней данных. Я хочу иметь возможность фильтровать эти данные и возвращать только тот объект, который содержит определенное c значение.
this.service.getRecords().pipe(
map(item => item.filter(items => items.attributes['identifier'].value === '101723102')),
tap(item => console.log(item)),
).subscribe();
Атрибуты [] содержат множество объектов, подобных указанному ниже:
[20000]: {identifier:"1239213", something: "42142", something: "42142", something: "42142".....}
Я пытаюсь отфильтровать и вернуть объекты, если идентификатор чему-то равен, но я не уверен, как получить доступ к значению, поскольку оно вложено, и я не могу использовать точечную нотацию. Текущий код возвращает ошибку: Cannot read property 'identifier' of undefined
[EDIT]: это служба, которую я использую
export class DataViewerService {
_recordDetails: Observable<DataClass[]>;
// служба ресурсов содержит код для извлечения конструктора данных (private _resourceService: ResourceService, ) {}
getRecords() {
return this._recordDetails = this._resourceService.search(CONSTANT, {})
.pipe(map(extractRecords))
.pipe(shareReplay()) as Observable<Data[]>;
}
function extractRecords(result) {
const records = [];
if (!isNullOrUndefined(result)) {
result.forEach(r => {
if (!isNullOrUndefined(r['payload'])) {
records.push(r.payload);
}
});
}
return records;
}
[EDIT]: Items Объект выглядит следующим образом:
{
attributes: [],
descrtiption: "",
name: "",
label: ""
}
I need to access the objects within the attributes[] of filter which looks like
attributes: [
{
identifier: "1243212",
something: "",
...
}
Это интерфейс, а возвращаемый объект имеет тип Data.
export interface Data {
name: string;
label: string;
attributes: DataAttributes[];
}
interface DataAttributes {
attributes: [
identifier: string;
something: string;
];
something: string;
...
}
И служба возвращает атрибуты [], которые содержат значения, которые я хочу отфильтровать