मेरे पास जावास्क्रिप्ट में मानचित्र के रूप में जानकारी आ रही है।

मैं इसे उन प्रकारों के आधार पर क्रमबद्ध करना चाहता हूं जिन्हें मैंने एक एनम के रूप में सेट किया है।

डेटा इस तरह दिखता है:

नक्शा(5)

{"Adopted" => 105, "Pending" => 176, "Missing" => 3, "InterestedParties" => 45, "WaitingForPickup" => 15}

हालांकि इस तरह देखे जाने पर यह और अधिक समझ में आ सकता है:

new Map<string, number>([
  ['Adopted', 105],
  ['Pending', 176],
  ['Missing', 3],
  ['InterestedParties', 45],
  ['WaitingForPickup', 15],
]);

मैं इस डेटा को "अनडॉप्टेड एनिमल्स", "होमेड एनिमल्स", "अज्ञात स्थिति" जैसी श्रेणियों में सॉर्ट करना चाहता हूं, इसलिए मैंने डेटा का एक समूह बनाया है जो एनम प्रकारों को मैप करता है (इसलिए AnimalStatusType.Pending "लंबित" है)

  const metricGroups = {
    unAdopted: [
      AnimalStatusType.Pending,
      AnimalStatusType.InterestedParties,
    ],
    adopted: [
      AnimalStatusType.Adopted,
    ],
    unknown: [
      AnimalStatusType.Missing,
      AnimalStatusType.WaitingForPickup
    ],
  }

मैं अपना नक्शा तीन अलग-अलग श्रेणियों के आधार पर छांटना चाहता हूं, जिन्हें अपनाया गया है, अपनाया नहीं गया है, और कुछ इस तरह दिखने के लिए अज्ञात है:

{
  adopted: [['adopted', 105]],
  unadopted: [['pending', 176],['interestedParties', 45]],
  unknown: [ ['missing', 3],['waitingForPickup', 15]],
}

लेकिन मैपिंग को ठीक से करने वाली किसी भी चीज़ को खोजने में मुझे थोड़ी कठिनाई हो रही है। मुझे लगता है कि शायद संयोजन Array.from या एक कम कार्यक्षमता काम कर सकती है, लेकिन खोज ज्यादातर जावास्क्रिप्ट की .map कार्यक्षमता को खींचती है जो मदद नहीं कर रही है।

 const GroupedData =  Array.from(animalData).reduce((acc, metric) => {
        acc[metricGroups[metric]].push(metric)
      })
1
stonerose036 24 अगस्त 2021, 17:50

2 जवाब

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

आप इसे map और Object.entries/Object.fromEntries के साथ कर सकते हैं

const input = new Map([
  ['Adopted', 105],
  ['Pending', 176],
  ['Missing', 3],
  ['InterestedParties', 45],
  ['WaitingForPickup', 15],
]);

const metricGroups = {
  unAdopted: [
    "Pending",
    "InterestedParties",
  ],
  adopted: [
    "Adopted",
  ],
  unknown: [
    "Missing",
    "WaitingForPickup"
  ],
}

const result = Object.fromEntries(Object.entries(metricGroups).map(([key, values]) => {
  return [
    key,
    values.map(value => ([value, input.get(value)]))
  ]
}));

console.log(result);
1
Jamiec 24 अगस्त 2021, 18:08

आप बस अपने metricGroups ऑब्जेक्ट को कम कर सकते हैं और एनम मानों को input में उपयुक्त कुंजी-मूल्य जोड़ी में मैप कर सकते हैं।

ध्यान दें कि आप किसी ऑब्जेक्ट की कुंजियों को सॉर्ट नहीं कर सकते।

const AnimalStatusType = {
  Adopted: 'adopted',
  InterestedParties: 'interestedParties',
  Missing: 'missing',
  Pending: 'pending',
  WaitingForPickup: 'waitingForPickup'
};

const metricGroups = {
  unAdopted: [
    AnimalStatusType.Pending,
    AnimalStatusType.InterestedParties,
  ],
  adopted: [
    AnimalStatusType.Adopted,
  ],
  unknown: [
    AnimalStatusType.Missing,
    AnimalStatusType.WaitingForPickup
  ],
};

const input = { 'Adopted': 105, 'Pending': 176, 'Missing': 3, 'InterestedParties': 45, 'WaitingForPickup': 15 };

const capitalize = (str) => str.charAt(0).toUpperCase() + str.slice(1);

const result = Object.entries(metricGroups)
  .reduce((acc, [key, value]) => ({
    ...acc,
    [key]: value.map(v => [v, input[capitalize(v)]])
  }), {});

console.log(result);
.as-console-wrapper { top: 0; max-height: 100% !important; }
1
Mr. Polywhirl 24 अगस्त 2021, 18:04