मैं एक स्रोत और कुंजी पैरामीटर के साथ एक ओमिट फ़ंक्शन बनाने पर काम कर रहा हूं, जो स्रोत के भीतर कुंजियों की जांच करता है, और यदि वे पाए जाते हैं, तो उन गुणों को स्रोत से छोड़ दिया जाता है, फिर शेष कुंजी के साथ एक नया ऑब्जेक्ट शाब्दिक बनाएं/ स्रोत के भीतर मूल्य जोड़े। अब तक, मैं असफल रहा हूं, और केवल एक ऐसा फ़ंक्शन बनाने में सक्षम हूं जो स्रोत के भीतर मिली चाबियों के साथ ऑब्जेक्ट बनाने के विपरीत करता है। क्या कोई यह पता लगाने में मदद कर सकता है कि मुझे क्या याद आ रहा है? इसकी बहुत सराहना की जाएगी!
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;
}
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]})}
}, {})
}
यहाँ समतल वस्तु के साथ एक सरल कार्यान्वयन है। मुझे यकीन नहीं है कि अगर आपकी वस्तु नेस्टेड हो सकती है तो चाबियाँ कैसे घोषित की जाएंगी, और आप नेस्टेड वैल्यू/कुंजी के कुछ एन स्तर निकालने की उम्मीद करेंगे
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}
एक दृष्टिकोण 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']))
Object.entries
< के साथ प्रविष्टियों में कनवर्ट करना /a> और Object.fromEntries
< /a> और फिर उक्त प्रविष्टियों को से फ़िल्टर करना <Array>.filter
अच्छा काम कर सकता है:
const omit = (obj, keys) => Object.fromEntries(Object.entries(obj).filter(a=>!keys.includes(a[0])));
आप एक नई वस्तु के लिए विनाश और आराम कर सकते हैं।
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']));
keys
में पास होते हैं, यहsource
से सभी चाबियों को कॉपी कर लेगा।