2015-03-26 8 views
8

पर आधारित ऑब्जेक्ट गुणों को फ़िल्टर करना क्या इस ऑब्जेक्ट से लॉनाश/अंडरस्कोर के साथ झूठी गुणों को फ़िल्टर करने का कोई शानदार तरीका है?मूल्य

एक .: दोहराएं से अधिक वस्तु की: कैसे _.compact(array) सरणियों

{ 
    propA: true, 
    propB: true, 
    propC: false, 
    propD: true, 
} 

से इतना

से falsey तत्वों को हटा

{ 
    propA: true, 
    propB: true, 
    propD: true, 
} 

उत्तर

15

4,0

आप _.pick चाहते Lodash से पहले, यह एक तर्क के रूप में एक समारोह लेता है और केवल कुंजियों युक्त एक वस्तु देता है जिसके लिए वह कार्य सत्य लौटाता है। तो अगर आप कर सकते हैं:

filtered = _.pick(obj, function(value, key) {return value;}) 

या और भी अधिक संक्षेप:

filtered = _.pick(obj, _.identity) 

Lodash 4.0

Lodash 4.0 _.pick है, जो गुण की एक सरणी लेता है, और _.pickBy जो लेता में _.pick समारोह विभाजित एक समारोह।

filtered = _.pickBy(obj); 
+1

मुझे 13 मिनट तक हराया;) –

3
यहाँ

हैं दो वेनिला जावास्क्रिप्ट विकल्पों लौटने के समान कुंजी और delete जिनके पास झूठा मूल्य है।

var obj = { 
 
    propA: true, 
 
    propB: true, 
 
    propC: false, 
 
    propD: true, 
 
}; 
 

 
Object.keys(obj).forEach(function(key) { 
 
    if (!obj[key]) delete obj[key]; 
 
}); 
 

 
console.log(obj);

देखें वस्तु की चाबियाँ पर Object. keys() और Array.prototype. forEach()

बी .: दोहराएं और एक नई वस्तु को truthy मान जोड़ने।

var obj = { 
 
    propA: true, 
 
    propB: true, 
 
    propC: false, 
 
    propD: true, 
 
}; 
 

 
var filteredObj = Object.keys(obj).reduce(function(p, c) {  
 
    if (obj[c]) p[c] = obj[c]; 
 
    return p; 
 
}, {}); 
 

 
console.log(filteredObj);

देखें Object. keys() और Array.prototype. reduce()

1

आप lodash उपयोग कर रहे हैं, मैं था: तो अब यह के रूप में यह दूसरा तर्क है, यह बस के रूप में लिखा जा सकता है है _.identity का उपयोग करने के

filtered = _.pickBy(obj, function(value, key) {return value;}) 

या, _.pickBy चूक के बाद होगी कुछ इस तरह की सिफारिश:

var object = { 
    propA: true, 
    propB: true, 
    propC: false, 
    propD: true, 
}; 

_.pick(object, _.identity); 
// → 
// { 
// propA: true, 
// propB: true, 
// propD: true 
// } 

pick() समारोह एक नया उद्देश्य यह है कि गुण है कि कॉलबैक रिटर्न टीआर शामिल उत्पन्न करता है uthy के लिए। तो हम कॉलबैक के रूप में identity() फ़ंक्शन का उपयोग कर सकते हैं, क्योंकि यह केवल प्रत्येक संपत्ति मान को वापस कर देगा।

1

दुर्भाग्य से मैं उपरोक्त पदों पर सीधे टिप्पणी नहीं कर सकता, इसलिए मैं यह अतिरिक्त पोस्ट बना देता हूं।

चूंकि लोडाश v4 ऊपर वर्णित कार्यक्षमता _.pickBy पर ले जाया गया है। _.identity के साथ डिफ़ॉल्ट के रूप में आप भी करने के लिए अपने कोड को बदल सकता है:

var filtered = _.pickBy(obj); 

एक काम उदाहरण के लिए इस JSBin देखें।