अगर मेरे पास जावास्क्रिप्ट में इस तरह की कोई वस्तु है:

let obj = {b: 3, c: 4, d: 6}

अगर मैं इसे नष्ट कर दूं तो मैं अलग-अलग हिस्सों को आसानी से प्राप्त कर सकता हूं, उदाहरण के लिए, अगर मैं करता हूं तो मुझे सी और डी मिल सकता है:

let {c, d} = obj

अब यह बहुत अच्छा है, लेकिन अगर मैं एक नक्शा बनाना चाहता हूं:

let m = new Map()
m.set('b', 3).set('c', 4).set('d', 6)

मैं अलग-अलग तत्वों को इसके साथ प्राप्त कर सकता हूं:

let c = m.get('c')
let d = m.get('d')

लेकिन क्या किसी वस्तु को मानचित्र की तरह नष्ट करने का कोई तरीका है जिस तरह से हमने एक मानक वस्तु के साथ किया था। मुझे उपरोक्त सिंटैक्स कई मामलों में उपयोग करने के लिए इतना आसान लगता है, कि यह वास्तव में मानचित्रों का उपयोग करते समय एक बहुत बड़ा नुकसान के रूप में कार्य करता है; इस तथ्य के बावजूद कि आप डिफ़ॉल्ट रूप से इटरेटर प्राप्त कर सकते हैं और इसी तरह (यहां लाभ सूचीबद्ध करें)।

9
user2662833 30 मार्च 2018, 09:42

4 जवाब

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

आप सीधे मानचित्र को नष्ट नहीं कर सकते हैं, आपको या तो पहले ऑब्जेक्ट में कनवर्ट करना होगा या कुछ विदेशी करना होगा, जैसे कॉल प्राप्त करने के लिए प्रॉक्सी का उपयोग करना। सहायक समारोह के साथ ऐसा कुछ:

function getFromMap (map) {
  return new Proxy(map, {
    get (obj, prop) {
      return obj.get(prop)
    }
  })
}

let m = new Map()
m.set('b', 3).set('c', 4).set('d', 6)

let { b, d } = getFromMap(m)
console.log(b, d)

टिप्पणी के लिए @Felix एहसान के लिए धन्यवाद। हाल ही के Object.fromEntries फ़ंक्शन इंटरमीडिएट रूपांतरण मानचित्र को ऑब्जेक्ट को सरल बनाया जा सकता है:

let { b, d } = Object.fromEntries(m)
6
dfsq 12 जिंदा 2020, 14:42

आप एक getMultiple() का उपयोग कर सकते हैं जो किसी ऑब्जेक्ट को आपकी इच्छित चाबियों के साथ लौटाता है, और फिर परिणामों को नष्ट कर देता है:

const m = new Map([['b', 3], ['c', 4], ['d', 6]]);

const getMultiple = (m, ...keys) => Object.assign(...keys.map(k => ({ [k]: m.get(k) })))

const { b, d } = getMultiple(m, 'b', 'd')

console.log('b', b)
console.log('d', d)
0
Ori Drori 30 मार्च 2018, 06:51

मानचित्र को नष्ट करने का कोई अंतर्निहित तरीका नहीं है, केवल एक चीज यह होगी कि इसे पहले किसी वस्तु में स्पष्ट रूप से परिवर्तित किया जाए:

const m = new Map();
m.set('b', 3)
  .set('c', 4)
  .set('d', 6);
const { b, c, d } = mapToObj(m);
console.log(d);

function mapToObj(inputMap) {
  const obj = {};
  for (const [key, value] of m) obj[key] = value;
  return obj;
}

लेकिन अगर आपकी चाबियां पहले से जानी जाती हैं, और बार-बार जोड़ी / हटाई नहीं जाती हैं, तो मानचित्र का उपयोग करने के लिए बहुत अधिक लाभ नहीं हो सकता है - बस इसके बजाय एक मानक ऑब्जेक्ट का उपयोग करें और आप मूल रूप से नष्ट कर सकते हैं।

0
CertainPerformance 30 मार्च 2018, 06:48
const m = new Map();
m.set('b', 3)
 .set('c', 4)
 .set('d', 6);
 
const [[,b], [,c], [,d]] = [...m];

console.log(b, c, d);
const [[,b], [,c], [,d]] = [...m];
11
Salih Şenol Çakarcı 30 मार्च 2018, 07:08