मैं एक स्रोत और कुंजी पैरामीटर के साथ एक ओमिट फ़ंक्शन बनाने पर काम कर रहा हूं, जो स्रोत के भीतर कुंजियों की जांच करता है, और यदि वे पाए जाते हैं, तो उन गुणों को स्रोत से छोड़ दिया जाता है, फिर शेष कुंजी के साथ एक नया ऑब्जेक्ट शाब्दिक बनाएं/ स्रोत के भीतर मूल्य जोड़े। अब तक, मैं असफल रहा हूं, और केवल एक ऐसा फ़ंक्शन बनाने में सक्षम हूं जो स्रोत के भीतर मिली चाबियों के साथ ऑब्जेक्ट बनाने के विपरीत करता है। क्या कोई यह पता लगाने में मदद कर सकता है कि मुझे क्या याद आ रहा है? इसकी बहुत सराहना की जाएगी!

function omit(source, keys) {
  var includedSource = {};
  for (var key in source) {
    for (var i = 0; i < keys.length; i++) {
      if (keys[i] !== key) {
        includedSource[key] = source[key];
        console.log('source[keys[i]]:', source[keys[i]]);
        console.log('includedSource:', includedSource);
      }
    }
  }
  return includedSource;
}

  function omit(source, keys) {
    var includedSource = {};
    for (var key in source) {
      for (var i = 0; i < keys.length; i++) {
        if (keys[i] === key) {
          includedSource[key] = source[key];
          console.log('source[keys[i]]:', source[keys[i]]);
          console.log('includedSource:', includedSource);
          }
        }
     }
     return includedSource;
   }
0
JB49er 15 जिंदा 2022, 22:04
1
आपका फ़ंक्शन यह जांच नहीं करता है कि क्या यह पाया गया है, यह सिर्फ यह जांचता है कि क्या यह किसी भी कुंजी के किसी के बराबर नहीं है। जिसका अर्थ है कि जैसे ही आप दो अलग-अलग keys में पास होते हैं, यह source से सभी चाबियों को कॉपी कर लेगा।
 – 
Bergi
15 जिंदा 2022, 22:08
बर्गी, मैं देख रहा हूँ कि तुम क्या कह रहे हो। यही वह जगह है जहां मुझे समस्याएं आ रही थीं, यह पता लगाने के लिए कि स्रोत के किसी भी गुण कुंजी के भीतर स्थित है या नहीं, फिर परिणाम को एक नई वस्तु में वापस कर रहा है। सभी का इनपुट बहुत मददगार था! सबको शुक्रीया!
 – 
JB49er
15 जिंदा 2022, 23:18

5 जवाब

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

आपके समाधान के साथ समस्या यह है कि, keys[i + 1], key के बराबर हो सकता है, भले ही keys[i] नहीं है।

अपना कोड सही करने के लिए, निम्नलिखित परिवर्तन लागू करें।

function omit(source, keys) {
  var includedSource = {};
  for (var key in source) {
    if(!keys.includes(key)) { // <--- Change this
       includedSource[key] = source[key];
       console.log('source[keys[i]]:', source[keys[i]]);
       console.log('includedSource:', includedSource);
    }
  }
  return includedSource;
}

एक और तरीका, सिर्फ मनोरंजन के लिए।

function omit(source, keys) {
    return Object.keys(source).reduce((acc, curr) => {
        return {...acc, ...(keys.includes(curr) ? {} : {[curr]: source[curr]})}
    }, {})
}
0
Parnab Sanyal 15 जिंदा 2022, 22:50

यहाँ समतल वस्तु के साथ एक सरल कार्यान्वयन है। मुझे यकीन नहीं है कि अगर आपकी वस्तु नेस्टेड हो सकती है तो चाबियाँ कैसे घोषित की जाएंगी, और आप नेस्टेड वैल्यू/कुंजी के कुछ एन स्तर निकालने की उम्मीद करेंगे

const obj = {
  A: 1,
  B: 2,
  C: 3,
  D: 4
};

function omit(data, keys) {
  let result = {};

  for (let key in data) {
    if (keys.includes(key)) continue;

    result[key] = data[key];
  }

  return result;
}

console.log(omit(obj, ["A", "D"])) // {B: 2, C: 3}
2
Eduard 15 जिंदा 2022, 22:11

एक दृष्टिकोण Object.entries() का उपयोग करना है और उन प्रविष्टियों को फ़िल्टर करना है जिनमें अवांछित कुंजियाँ हैं, फिर फ़िल्टर की गई प्रविष्टियों से नई वस्तु बनाने के लिए Object.fromEntries() का उपयोग करें

const omit = (data, keys) => {
  return Object.fromEntries(
    Object.entries(data).filter(([k]) => !keys.includes(k))
  )
}


console.log(omit({ a:1,b:2,c:3,d:4}, ['a', 'b']))
1
charlietfl 15 जिंदा 2022, 22:17

Object.entries< के साथ प्रविष्टियों में कनवर्ट करना /a> और Object.fromEntries< /a> और फिर उक्त प्रविष्टियों को से फ़िल्टर करना <Array>.filter अच्छा काम कर सकता है:

const omit = (obj, keys) => Object.fromEntries(Object.entries(obj).filter(a=>!keys.includes(a[0])));
1
skara9 15 जिंदा 2022, 22:17

आप एक नई वस्तु के लिए विनाश और आराम कर सकते हैं।

function omit(object, keys) {
    let _; // prevent to be global
    for (const key of keys) ({ [key]: _, ...object } = object);
    return object;
}

console.log(omit({ a: 1, b: 2, c: 3, d: 4 }, ['b', 'c']));
1
Nina Scholz 15 जिंदा 2022, 23:04