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

JavaScript में 2 ऑब्जेक्ट्स की तुलना करते हुए सरणी के नेस्टेड मान को ग्रुप करना


मान लीजिए हमारे पास निम्नलिखित JSON ऑब्जेक्ट है:

const input = {
  "before": {
    "device": [
      {
        "id": "1234",
        "price": "10",
        "features": [
          { "name": "samsung", "price": "10" },
          { "name": "Apple", "price": "20" }
        ]
      },
      {
        "id": "2154",
        "price": "20",
        "features": [
          { "name": "samsung", "price": "30" },
          { "name": "Moto", "price": "40" }
        ]
      }
    ]
  },
  "after": {
    "device": [
      {
        "id": "1234",
        "price": "50",
        "features": [
          { "name": "samsung", "price": "20" },
          { "name": "Lenovo", "price": "30" }
        ]
      },
      {
        "id": "2158",
        "price": "40",
        "features": [
          { "name": "samsung", "price": "30" }
        ]
      }
    ]
  }
};

हमारी आवश्यकता है कि यदि समान id before और after ऑब्जेक्ट में है तो id और उसके फीचर को एक पंक्ति में ग्रुप किया जाए।

आवश्यक आउटपुट को निम्नलिखित दृश्य प्रतिनिधित्व द्वारा बेहतर ढंग से वर्णित किया जा सकता है।

JavaScript में 2 ऑब्जेक्ट्स की तुलना करते हुए सरणी के नेस्टेड मान को ग्रुप करना

हमें एक फ़ंक्शन लिखना है जो डेटा को उसी तरह ग्रुप और सॉर्ट करता है।

उदाहरण

निम्नलिखित कोड देखें:

const input = {
  "before": {
    "device": [
      { "id": "1234", "price": "10", "features": [ { "name": "samsung", "price": "10" }, { "name": "Apple", "price": "20" } ] },
      { "id": "2154", "price": "20", "features": [ { "name": "samsung", "price": "30" }, { "name": "Moto", "price": "40" } ] }
    ]
  },
  "after": {
    "device": [
      { "id": "1234", "price": "50", "features": [ { "name": "samsung", "price": "20" }, { "name": "Lenovo", "price": "30" } ] },
      { "id": "2158", "price": "40", "features": [ { "name": "samsung", "price": "30" } ] }
    ]
  }
};
const formatJSON = data => {
  const sub = Object.fromEntries(Object.keys(data).map(k => [k, 0]));
  return Object.values(Object.entries(data).reduce((r, [col, { device }]) => {
    device.forEach(({ id, price, features }) => {
      r[id] = r[id] || [{ id, ...sub }];
      r[id][0][col] = price;
      features.forEach(({ name, price }) => {
        let temp = r[id].find(q => q.name === name);
        if (!temp) {
          r[id].push(temp = { name, ...sub });
        }
        temp[col] = price;
      });
    });
    return r;
  }, {}));
};
console.log(formatJSON(input));

आउटपुट

यह कंसोल पर निम्नलिखित आउटपुट देगा:

[
  [
    { id: '1234', before: '10', after: '50' },
    { name: 'samsung', before: '10', after: '20' },
    { name: 'Apple', before: '20', after: 0 },
    { name: 'Lenovo', before: 0, after: '30' }
  ],
  [
    { id: '2154', before: '20', after: 0 },
    { name: 'samsung', before: '30', after: 0 },
    { name: 'Moto', before: '40', after: 0 }
  ],
  [
    { id: '2158', before: 0, after: '40' },
    { name: 'samsung', before: 0, after: '30' }
  ]
]

  1. JavaScript में ऐरे ऑब्जेक्ट की लंबाई JavaScript में ऐरे ऑब्जेक्ट की लंबाई

    JavaScript में Length प्रॉपर्टी ऑब्जेक्ट का आकार लौटाती है। स्ट्रिंग और ऐरे ऑब्जेक्ट की लंबाई के लिए कोड निम्न है -उदाहरण<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, i

  1. JavaScript में ऑब्जेक्ट्स की सरणी को ID के आधार पर कैसे ग्रुप करें? JavaScript में ऑब्जेक्ट्स की सरणी को ID के आधार पर कैसे ग्रुप करें?

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

  1. जावास्क्रिप्ट ऑब्जेक्ट्स के ऐरे पर ऐरे के मेथड्स का उपयोग करना जावास्क्रिप्ट ऑब्जेक्ट्स के ऐरे पर ऐरे के मेथड्स का उपयोग करना

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