получить конкретный объект в массиве

#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)
  

краткое описание того, как это работает.