मेरे पास इन गुणों के साथ एक वस्तु है:

{
    title: 'Test',
    places: [
      {
        id: 1,
        longitude: 48.8469511,
        latitute: 2.3077989,
        address: 'Pont de Bir-Hakeim',
        city: {name: 'Paris', id: 1}
      },
      {
        id: 2,
        longitude: 48.855225,
        latitute: 2.288048,
        address: 'Palais-Musée Galliera, 10 avenue Pierre-1er-de-Serbie',
        city: {name: 'Paris', id: 1}
      },
      {
        id: 3,
        longitude: 50.8283315,
        latitute: -115.2608429,
        address: 'Fortress Moutain',
        city: {name: 'Calgary', id: 2}
      }
    ]
}

मुझे जो परिणाम चाहिए वह यहां दिया गया है:

[
  {
    id: 1,
    name: 'Paris'
  },
  {
    id: 2,
    name: 'Calgary'
  },
]

groupBy map reduce का उपयोग करके मैं इसे कैसे प्राप्त कर सकता हूं? यहां मैंने कोशिश की है:

   return from(movie.places).pipe(
      groupBy(place => place.city.name),
      mergeMap(place => place.pipe(map(obj => obj.city.name))),
      toArray()
   );

कौन सा उत्पादन:

['Paris', 'Paris', 'Calgary']

groupBy, map, mergeMap, toArray का एक साथ उपयोग करने के बारे में मेरे दिमाग में यह बहुत स्पष्ट नहीं है... सहायता के लिए धन्यवाद!

1
HJerem 24 पद 2018, 13:44

2 जवाब

सबसे बढ़िया उत्तर

आप ऐसा कुछ कर सकते हैं:

source$.pipe(
  map(state => state.places), // transform your source object to list of places.
  // Transform your list of place by list of city, then reduce it for unduplicate it.
  map(state => state.map(e => e.city).reduce( ( acc, cur ) => [
    ...acc.filter( ( obj ) => obj.id !== cur.id ), cur
  ], [] ))
).subscribe(console.log);

मैंने अपना कोड साफ़ रखने के लिए दो अलग-अलग मानचित्रों में विभाजित किया है, यदि आप चाहें तो आप इसे आसानी से एकल मानचित्र में मर्ज कर सकते हैं।

यह कोड डेटा के बहुत बड़े संग्रह के लिए भी सुरक्षित नहीं है, यदि आप कुशलता से डील करना चाहते हैं तो normalizr दृष्टिकोण को प्राथमिकता दें। बड़े डेटा के साथ।

लाइव कोड

id . से वस्तु आधार के uniq सरणी के लिए स्रोत

1
Yanis-git 24 पद 2018, 13:57

एक पंक्ति में, मुझे लगता है, और केवल toArray, map, distinct ऑपरेटरों का उपयोग करके आप यह कर सकते हैं:

return from(movie.places).pipe(map(place => place.city), distinct(entry => entry.id),toArray());

डेमो

0
selem mn 24 पद 2018, 14:23