2017-07-25 15 views
-2

array.map関数を使用すると、オブジェクトにデータがいくつか取得されています。しかし、私は配列でそれを取得する必要があります。この問題はイメージの関数で発生します。array.map()関数を使用してjavascriptでオブジェクトを取得する

EBIT:array.map機能を含む私のコードの

一部は、コードが当面の問題与えられた混乱と思われる場合は、以下の(申し訳ありませんように見えますが、私は取り残されていたので、いくつかの混乱があるように見えました前のコードの残りの部分):

function getVenues(page, size, venues) { 
 
    page = page || 0; 
 
    size = size || 200; 
 
    venues = venues || []; 
 
    return axios 
 
    .get(`https://app.ticketmaster.com/discovery/v2/venues.json?apikey=MYAPIKEY&page=${page}&size=${size}&countryCode=DK`) 
 
    .then(response => response.data._embedded.venues) 
 
    .then(rawVenues => { 
 
     rawVenues.forEach(venue => venues.push(venue)); 
 
     if (rawVenues.length < size) { 
 
     // All done return the compiled list. 
 
     return venues; 
 
     } 
 
     // Recurse over the next set of venues by adding another promise to the chain. 
 
     return getVenues(page + 1, size, venues); 
 
    }); 
 
} 
 

 
function getEvents(page, size, events) { 
 
    page = page || 0; 
 
    size = size || 200; 
 
    events = events || []; 
 
    return axios 
 
    .get(`https://app.ticketmaster.com/discovery/v2/events.json?apikey=MYAPIKEY&countryCode=DK&size=${size}&page=${page}`) 
 
    .then(response => response.data._embedded.events) 
 
    .then(rawEvents => { 
 
     rawEvents.forEach(event => events.push(event)); 
 
     if (rawEvents.length < size) { 
 
     // All done return the compiled list. 
 
     return events; 
 
     } 
 
     // Recurse over the next set of events by adding another promise to the chain. 
 
     return getEvents(page + 1, size, events); 
 
    }); 
 

 
} 
 

 
app.get('/tm2', (req, res) => { 
 
    getVenues().then(rawVenues => { 
 

 
    const venuesToBeInserted = rawVenues.map(venue => { 
 
     return { 
 
     sourceID: venue.id, 
 
     venue: venue.name, 
 
     postalCode: venue.postalCode, 
 
     city: venue.city.name, 
 
     country: venue.country.name, 
 
     countryCode: venue.country.countryCode, 
 
     address: !!venue.address ? venue.address.line1 : null, 
 
     longitude: !!venue.location ? venue.location.longitude : null, 
 
     latitude: !!venue.location ? venue.location.latitude : null, 
 
     source: 'ticketmaster' 
 
     }; 
 
    }); 
 

 
    // Return promise so errors bubble up the chain... 
 
    return Venue.create(venuesToBeInserted).then(venues => { 
 
     console.log("venues inserted"); 
 

 

 

 
     // Return promise so errors bubble up the chain... 
 
     return getEvents().then(rawEvents => { 
 

 
     const eventsToBeInserted = rawEvents.map(event => { 
 
      return { 
 
      name: event.name.trim(), 
 
      slug: slugify(event.name.trim()).toLowerCase(), 
 
      sourceID: !!event._embedded.venues ? event._embedded.venues.map(sourceIDs => { 
 
       return { 
 
       sourceID: !!sourceIDs ? sourceIDs.id : [] 
 
       } 
 
      }) : [], 
 
      tags: !!event.classifications ? event.classifications.map(tag => { 
 
       return { 
 
       tags: !!tag ? [tag.segment.name, tag.genre.name] : [], 
 
       } 
 
      }) : [], 
 
      images: !!event.images ? event.images.map(image => { 
 
       return { 
 
       images: !!image ? image.url : [] 
 
       } 
 
      }) : [] 
 

 
      } 
 
     }) 
 

 
     // Return promise so errors bubble up the chain... 
 
     return Event.create(eventsToBeInserted).then(events => { 
 
      console.log("events inserted"); 
 

 
     }); 
 
     }); 
 
    }); 
 
    }).then(() => { // This then is fired after all of the promises above have resolved... 
 
    return Event.find({}).select({ 
 
     genres: 1, 
 
     tag: 1 
 
    }).limit(30).populate('event').populate('venue').then(events => { 
 
     console.log(util.inspect(events)); 
 
     res.send(events); 
 
    }); 
 
    }).catch(err => { // Catches any error during execution. 
 
    console.error(err); 
 
    res.status(500).send(err); 
 
    }); 
 
});

私の現在の出力は次のようになります3210

images: 
    [ { images: 'url_1' }, 
    { images: 'url_2' }, 
    { images: 'url_3' } ] 

は、私は、次の形式でそれを取得したい:

images: 
    [ { 'url_1' }, 
    { 'url_2' }, 
    { 'url_3' } ] 
+0

スニペットツール(Ctrl + M)を使用して作業サンプルを投稿することを検討します。これにより、回答者は問題に正確な解決策を投稿できます。 – ideaboxer

+0

私はあなたの 'map()'をすべてインライン化した理由を理解するのが難しいです。あなたのコードをより小さな塊に分割して検証した場合、もっと読みやすくなります。 '!! event.classifications? ...:[] '他の場所のどこかで、あなたのコードをより簡潔にすることができます。 –

+0

ログやその他のテキストを画像として投稿しないでください。 –

答えて

0

私はより良いあなたのコードを整理する方法についてさらにコメントを避けることができます。今のところ、目的の結果を得るには、それぞれの呼び出しをmap()にラップしたオブジェクトリテラルを削除してください。 imagesを固定たとえば、ここから変更します。

images: !!event.images ? event.images.map(image => { 
    return { 
    images: !!image ? image.url : [] 
    } 
}) : [] 

をこれに:

images: !!event.images ? event.images.map(image => { 
    return !!image ? image.url : '' 
}).filter(Boolean) : [] 

ご入力event.images配列がurl財産ずに不正な形式のオブジェクトを含む、またはそれ自体が不足しているだろう、なぜ私はわからないんだけど.filter(Boolean)は、3進演算子... ? ... : ''の3番目の式で指定された空の文字列を削除することによってそれらを処理します。

関連する問題