यहां लॉनाश/अंडरस्कोर के आधार पर एक स्टैंडअलोन फ़ंक्शन है जो मैंने लिखा है जो वही करता है।
यह ऑब्जेक्ट या सरणी में प्रत्येक (मान, इंडेक्सऑर्की) जोड़ी के लिए कॉलबैक कॉल करता है और यदि सही परिणामस्वरूप ऑब्जेक्ट में उस जोड़ी को छोड़ देगा।
कॉलबैक को मूल्य के दौरे के बाद बुलाया जाता है ताकि आप अपनी स्थिति से मेल खाने वाले मूल्यों का एक संपूर्ण उप-पेड़ छोड़ सकें।
function deepOmit(sourceObj, callback, thisArg) {
var destObj, i, shouldOmit, newValue;
if (_.isUndefined(sourceObj)) {
return undefined;
}
callback = thisArg ? _.bind(callback, thisArg) : callback;
if (_.isPlainObject(sourceObj)) {
destObj = {};
_.forOwn(sourceObj, function(value, key) {
newValue = deepOmit(value, callback);
shouldOmit = callback(newValue, key);
if (!shouldOmit) {
destObj[key] = newValue;
}
});
} else if (_.isArray(sourceObj)) {
destObj = [];
for (i = 0; i <sourceObj.length; i++) {
newValue = deepOmit(sourceObj[i], callback);
shouldOmit = callback(newValue, i);
if (!shouldOmit) {
destObj.push(newValue);
}
}
} else {
return sourceObj;
}
return destObj;
}
कुछ नमूने
var sourceObj = {
a1: [ undefined, {}, { o: undefined } ],
a2: [ 1, undefined ],
o: { s: 's' }
};
deepOmit(sourceObj, function (value) {
return value === undefined;
});
//=> { a1: [ {}, {} ], a2: [ 1 ], o: { s: 's' }}
//omit empty objects and arrays too
deepOmit(sourceObj, function (value) {
return value === undefined ||
(_.isPlainObject(value) && !_.keys(value).length) ||
(_.isArray(value) && !value.length);
});
//=> { a2: [ 1 ], o: { s: 's' }}
//indexOrKey is the string key or the numeric index if the object is array
deepOmit([ 0, 1, 2, 3, 4 ], function (value, indexOrKey) {
return indexOrKey % 2;
});
//=> [ 0, 2, 4 ]
वहाँ $ .extend' का उपयोग कर 'क्लोन सदस्यों को फ़िल्टर करने के कोई रास्ता नहीं है, लेकिन आप अपने खुद के कार्यान्वयन कि क्षेत्रों को छोड़ देता है रोल कर सकता है ... –
मैं एक बन जाएगा फ़ंक्शन जो किसी ऑब्जेक्ट को क्लोन करने के लिए स्वीकार करता है और आपके नए ऑब्जेक्ट में निकाले जाने वाले गुणों की सरणी (या शामिल) को स्वीकार करता है। JQuery में ऐसा करने के लिए अंतर्निहित विधि नहीं है। –
Underscore.js में 'प्लक' फ़ंक्शन शामिल है, जो आप चाहते हैं कि एक प्रकार का व्यस्त संस्करण है: आप जो भी शामिल करना चाहते हैं उसे निर्दिष्ट करें, जिसे आप शामिल करना चाहते हैं उसे निर्दिष्ट करें। शायद यह आपके कार्यान्वयन के लिए एक प्रारंभिक बिंदु प्रदान कर सकता है? – Henrik