Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> JavaScript

JavaScript में '_id' कुंजी के लिए समान मान वाले सभी ऑब्जेक्ट को एक साथ समूहित करना


मान लीजिए हमारे पास ऑब्जेक्ट की एक सरणी है जैसे -

const arr = [
    {_id : "1", S : "2"},
    {_id : "1", M : "4"},
    {_id : "2", M : "1"},
    {_id : "" , M : "1"},
    {_id : "3", S : "3"}
];

हमें एक JavaScript फ़ंक्शन लिखना है जो ऐसी एक सरणी लेता है और उन सभी ऑब्जेक्ट को एक साथ समूहित करता है जिनका '_id' कुंजी के लिए समान मान है।

इसलिए, अंतिम आउटपुट कुछ इस तरह दिखना चाहिए -

const output = [
    {_id : "1", M : "4", S : "2", Total: "6"},
    {_id : "2", M : "1", S : "0", Total: "1"},
    {_id : "6", M : "1", S : "0", Total: "1"},
    {_id : "3", M : "0", S : "3", Total: "3"}
];

उदाहरण

इसके लिए कोड होगा -

const arr = [
    {_id : "1", S : "2"},
    {_id : "1", M : "4"},
    {_id : "2", M : "1"},
    {_id : "6" , M : "1"},
    {_id : "3", S : "3"}
];
const pickAllConstraints = arr => {
    let constraints = [];
    arr.forEach(el => {
        const keys = Object.keys(el);
        constraints = [...constraints, ...keys];
    });
    return constraints.filter((el, ind) => el !== '_id' && ind === constraints.lastIndexOf(el));
};
const buildItem = (cons, el = {}, prev = {}) => {
    const item = {};
    let total = 0
    cons.forEach(i => {
        item[i] = (+el[i] || 0) + (+prev[i] || 0);
        total += item[i];
    });
    item.total = total;
    return item
}
const buildCumulativeArray = arr => {
    const constraints = pickAllConstraints(arr);
    const map = {}, res = [];
    arr.forEach(el => {
        const { _id } = el;
        if(map.hasOwnProperty(_id)){
            res[map[_id] - 1] = {
                _id, ...buildItem(constraints, el, res[map[_id] - 1])
            };
        }else{
            map[_id] = res.push({
                _id, ...buildItem(constraints, el)
            });
        }
    });
    return res;
};
console.log(buildCumulativeArray(arr));

आउटपुट

कंसोल में आउटपुट होगा -

[
    { _id: '1', M: 4, S: 2, total: 6 },
    { _id: '2', M: 1, S: 0, total: 1 },
    { _id: '6', M: 1, S: 0, total: 1 },
    { _id: '3', M: 0, S: 3, total: 3 }
]
  1. - JavaScript में की/वैल्यू पेयर्स के लिए ऑब्जेक्ट्स बनाम ऐरे का समाधान कैसे करें?

    की-वैल्यू पेयर्स के लिए ऑब्जेक्ट लिटरल का उपयोग करें: var players = { 600: सचिन, 300: ब्रैड }; अधिक मान जोड़ने के लिए: var players = { 900: सचिन, 300: ब्रैड, 700: स्टीव, 200: राहुल, 600: केविन, // डुप्लीकेट की - अंतिम मान प्रभावी 500: डेविड }; नोट: डुप्लीकेट कीज़ में अंतिम मान जीतता

  1. जावास्क्रिप्ट में वैल्यू के आधार पर ऑब्जेक्ट्स को ग्रुप कैसे करें? जावास्क्रिप्ट में वैल्यू के आधार पर ऑब्जेक्ट्स को ग्रुप कैसे करें?

    जावास्क्रिप्ट में वैल्यू के आधार पर ऑब्जेक्ट्स को ग्रुप करने के लिए निम्नलिखित कोड है: उदाहरण <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /&g

  1. जावास्क्रिप्ट में ऑब्जेक्ट्स के लिए रिड्यूस मेथड कैसे लागू करें? जावास्क्रिप्ट में ऑब्जेक्ट्स के लिए रिड्यूस मेथड कैसे लागू करें?

    जावास्क्रिप्ट में ऑब्जेक्ट्स पर रिड्यूस मेथड लागू करने के लिए निम्नलिखित कोड है: उदाहरण <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <