नीचे दिए गए कोड ऑब्जेक्ट को {"a":"1","b":"2","c":"3","d":"4","e":"5"}, कम करने में परिवर्तित कर रहे हैं यह सरणी के माध्यम से लूपिंग कर रहा है और वांछित आउटपुट उत्पन्न करता है। लेकिन फिर थ्रो को कम करें TypeError : undefined कोई फंक्शन नहीं है।

मैं कई लिंक से गुजरा हूं लेकिन वे मेरी त्रुटि का समाधान नहीं हैं।

किसी भी प्रकार की मदद का स्वागत है।

कृपया नीचे दिए गए कोड स्निपेट की जांच करें

let a= {
    "a": ["1", "2"],
    "b": ["2", "2"],
    "c": ["3", "2"],
    "d": ["4", "2"],
    "e": ["5", "2"]
}

const b= Object.assign(...Object.entries(a).map(value => value.map((value1, index) => index == 0 ? value1 : value1[0])).reduce((a, c) => {
    //console.log('c', c);
    a[c[0]] = c[1];
    console.log(a);
    return a;
}, {}));
4
JackDaniels 15 अक्टूबर 2018, 01:45

1 उत्तर

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

किसी ऑब्जेक्ट को तर्क सूची में फैलाने का प्रयास करने के लिए समस्या को कम किया जा सकता है:

let a = {
  "a": ["1", "2"],
  "b": ["2", "2"],
  "c": ["3", "2"],
  "d": ["4", "2"],
  "e": ["5", "2"]
}

const reduceResult = Object.entries(a)
  .map(value => value
    .map((value1, index) => index == 0 ? value1 : value1[0])
  )
  .reduce((a, c) => {
    a[c[0]] = c[1];
    return a;
  }, {});

console.log('about to Object.assign');
const b = Object.assign(
  ...reduceResult
);

वस्तुओं को तर्क सूचियों में नहीं फैलाया जा सकता - वस्तुओं को केवल अन्य वस्तुओं में फैलाया जा सकता है, जैसे

const b = { ...reduceResult };

लेकिन फैलने की कोई आवश्यकता नहीं है - केवल reduce का परिणाम स्वयं ही लें, और आपके पास वह है जो आपको चाहिए। आप दो .map को हटाकर और केवल reduce का उपयोग करके कोड को सरल बना सकते हैं:

let a = {
  "a": ["1", "2"],
  "b": ["2", "2"],
  "c": ["3", "2"],
  "d": ["4", "2"],
  "e": ["5", "2"]
}

const b = Object.entries(a)
  .reduce((acc, [key, [firstValue]]) => ({...acc, [key]: firstValue}), {})
  
console.log(b);
6
CertainPerformance 14 अक्टूबर 2018, 23:37