#angular #typescript
#angular #typescript
Вопрос:
У меня возникла проблема с получением определенного объекта в массиве.
Пример массива
Я просто хочу id
Код
for (let item of this.commonService.popularList$.getValue()) {
console.log(item['menuList'])
}
если я добавлю такой код console.log(item['menuList'][id])
, он будет отображаться следующим образом undefined
Комментарии:
1. Вероятно, имел в виду
item['menuList'][0]['id']
или дажеitem['menuList'][0].id
(если я что-то не понял)2. если я добавлю [0], он просто выберет один, а если больше одного? что мне делать?-
3.
popularList$
ВключенObservable
? Обычно это то, что указывает$
суффикс.
Ответ №1:
Похоже, вы обращаетесь к массиву объектов.
Учитывая следующее:
const arr = [{ id: 12 }, { id: 57 }];
Вы можете получить доступ к объектам по индексу, а затем извлечь массив, следующий пример предоставит вам идентификатор первого элемента в списке (измените 0 на любой желаемый индекс.)
arr[0].id
Или вы могли бы сопоставить массив с массивом просто идентификаторов, подобных таким…
arr.map(({ id }) => id)
Который вернет новый массив, в этом примере это будет равно:
[12, 57]
Ответ №2:
Если item[‘menuList’] представляет собой массив объектов, то вам также необходимо ввести индекс
for (let item of this.commonService.popularList$.getValue()) {
console.log(item['menuList'])
for(let i=0; i<item['menuList'].length; i ){
console.log(item['menuList'][i]['id']);//will print the ids
}
}
Ответ №3:
let idArray = [];
for (let item of this.commonService.popularList$.getValue()) {
if(item amp;amp; item['menuList'] amp;amp; Array.isArray(item['menuList']))
item['menuList'].forEach(menu => idArray.push(menu.id));
}
console.log(idArray)
Тестовый код
let data = [{menuList:[{id:1},{id:2}]},{menuList:[{id:3},{id:4}]}];
let idArray = [];
for (let item of data) {
if(item amp;amp; item['menuList'] amp;amp; Array.isArray(item['menuList']))
item['menuList'].forEach(menu => idArray.push(menu.id));
}
console.log(idArray)
Ответ №4:
Похоже, что this.commonService.popularList$
это RxJS BehaviorSubject
, использование его GetValue()
/ value
members может быть нежелательным, потому что мы не получим никаких новых значений, которые публикуются BehaviorSubject
.
Поэтому я предложу альтернативу тому, что было предложено до сих пор.
this.commonService.popularList$.subscribe(popularList => {
for (const item of popularList) {
console.log(item.id);
}
});
Это означает, что мы всегда будем печатать последние значения по мере их поступления.
Ответ №5:
Для получения нужного идентификатора просто выполните следующие действия:
const arr = [{ id: 9 }, { id: 15 }, { id: 18 }, { id: 25 }];
const specificId = 18;
const yourId = arr.find(({id}) => id === specificId);
console.log(yourId)
краткое описание того, как это работает.