2016-11-28 14 views
6

करने के लिए सभी वस्तु कुंजी सेट करने देता है कहते हैं कि मैं एक वस्तुझूठी

filter: { 
    "ID": false, 
    "Name": true, 
    "Role": false, 
    "Sector": true, 
    "Code": false 
    } 

मैं (उन्हें पुनर्स्थापित करने के लिए) को गलत पर सभी कुंजियों सेट करना चाहते हैं। ऐसा करने का सबसे अच्छा तरीका क्या है, मैं foreach और सामान के साथ लूपिंग से बचना चाहता हूं। कोई साफ एक लाइनर?

+0

धन्यवाद कृपया एक उत्तर लिखें! – chefcurry7

+0

इसके बारे में, 'फ़िल्टर: {}' यदि आपने इसके लिए 'फ़िल्टर' संभाला था? – Aruna

उत्तर

10

lodash का उपयोग करना, mapValues एक सुंदर, पाश से मुक्त तरीका है:

filter = { 
    "ID": false, 
    "Name": true, 
    "Role": false, 
    "Sector": true, 
    "Code": false 
}; 

filter = _.mapValues(filter,() => false); 

आप चाहते हैं Underscore.js के साथ ऐसा करें, एक समकक्ष है, लेकिन थोड़ा अलग नाम के साथ:

filter = _.mapObject(filter,() => false); 

या तो मामले में, filter के मान पर सेट किया जाएगा:

{ ID: false, 
    Name: false, 
    Role: false, 
    Sector: false, 
    Code: false } 
+0

इसके लिए धन्यवाद। एक प्रश्न, अगर मैं उस संपत्ति को प्राप्त करना चाहता हूं जिसकी कीमत "सत्य" है (केवल एक ही समय में), तो इसे कैसे करना है? – chefcurry7

+0

उदाहरण डेटा इस बात पर विश्वास करता है कि एक समय में केवल एक ही संपत्ति 'सत्य' है। लेकिन हालांकि बहुत से लोग हैं, '_.keys (फ़िल्टर)। फ़िल्टर (के => फ़िल्टर [के]) 'आपको सत्य के मूल्यों के लिए सभी चाबियों की एक त्वरित सरणी देगा। यदि आप सख्ती से बूलियन चाहते हैं तो आप 'सत्य' के लिए सटीक समतुल्यता का उपयोग कर सकते हैं। और आप हमेशा परिणाम प्राप्त करने के लिए परिणामी सरणी को इंडेक्स कर सकते हैं: '_.keys (फ़िल्टर)। फ़िल्टर (के => फ़िल्टर [के]) [0]'। यदि कोई नहीं है तो वह 'अपरिभाषित' लौटाता है। उस अभिव्यक्ति में "फ़िल्टर" के तीन उदाहरणों के लिए खेद है, लेकिन आपका परिवर्तनीय नाम फ़ंक्शन नाम ओवरलोड करता है। –

+0

@ chefcurry7 आपको '_.find (_। कुंजी (फ़िल्टर), के => फ़िल्टर [के]) भी पसंद हो सकता है। यह समान रूप से काम करता है, लेकिन बहुत छोटा है। –

15
खैर यहाँ

वेनिला जे एस के साथ एक लाइनर है:

Object.keys(filter).forEach(v => filter[v] = false) 

यह .forEach() विधि के साथ एक अंतर्निहित पाश का उपयोग करता है, लेकिन आप पाश करने के लिए एक ही रास्ता या होगा एक और (जब तक आप की जगह द्वारा रीसेट एक हार्डकोडेड डिफ़ॉल्ट ऑब्जेक्ट शाब्दिक के साथ पूरी वस्तु)।

+2

अगर मैं गलत हूं तो मुझे सही करें लेकिन यह नहीं किया जा सकता ** ** लूपिंग के बिना। सुनिश्चित नहीं है कि ओपी इसे समझता है या नहीं। –

+0

@CarlEdwards यह ठीक कार्ल है। मुझे एहसास नहीं हुआ कि तीर कार्य उपयोगी थे। – chefcurry7

+0

यहां तक ​​कि एक तीर समारोह के बिना भी यह अभी भी बहुत छोटा है, जैसा कि दूसरे उत्तर में है। – nnnnnn

6

यदि आप ES6 का उपयोग नहीं कर रहे हैं, तो यह ES5 समकक्ष है।

Object.keys(filter).forEach(function(key, value) { 
    return filter[key] = false; 
}) 
0

कोड का एक छोटा सा लाइन सभी ब्राउज़रों के साथ संगत:

for(var i in your_object) your_object[i] = false; 
1

hasOwnProperty

`` `इस्तेमाल किया जाना चाहिए

for(var i in your_object) { 
    if (Object.hasOwnProperty.call(your_object, i)) { 
    your_object[i] = false; 
    } 
} 

` ``

संबंधित मुद्दे