У меня есть массив объектов, которые содержат свойство, называемое курсами, и внутри каждого массива объектов рейтинги являются идентификаторами (среди других свойств, которые здесь не показаны для простоты). Как я могу сопоставить эти идентификаторы с новым ...

1
Michael 15 Янв 2021 в 10:53

3 ответа

Лучший ответ

Для этого можно использовать комбинации .concat() с .map().

const sampleObject = [
 {
   id: '123',
   rates: [{ id: '123' }, { id: '456' }]
 },
 {
   id: '456',
   rates: [{ id: '789' }, { id: 'ABC' }]
 },
 {
   id: '789',
   rates: [{ id: 'DEF' }, { id: 'GHI' }]
 }];
 
 let result = [];
 for(let item of sampleObject){
    result = result.concat(item.rates.map(r => r.id));
 } 
console.log(result);

Или .reduce вот так

Метод reduce() выполняет функцию редуктора (которую вы предоставляете) на каждый элемент массива, в результате чего получается одно выходное значение.

const sampleObject = [
 {
   id: '123',
   rates: [{ id: '123' }, { id: '456' }]
 },
 {
   id: '456',
   rates: [{ id: '789' }, { id: 'ABC' }]
 },
 {
   id: '789',
   rates: [{ id: 'DEF' }, { id: 'GHI' }]
 }];
 
 const result = sampleObject.reduce((acc, x) => acc.concat(x.rates.map(r => r.id)), []);
 console.log(result);
2
Phong 15 Янв 2021 в 08:11

Использование forEach и destructuring

const rateIds = (arr, output = []) => {
  arr.forEach(({ rates }) => rates.forEach(({ id }) => output.push(id)));
  return output;
};

const sampleResponse = [
  {
    id: "123",
    rates: [{ id: "123" }, { id: "456" }],
  },
  {
    id: "456",
    rates: [{ id: "789" }, { id: "ABC" }],
  },
  {
    id: "789",
    rates: [{ id: "DEF" }, { id: "GHI" }],
  },
];

console.log(rateIds(sampleResponse));
0
sivako 15 Янв 2021 в 08:31
65732368