कैसे दर्ज करें के साथ एक वस्तु की चाबियाँ फ़िल्टर करने के लिए?


178

मेरे पास कुछ कुंजियों के साथ एक वस्तु है, और मैं केवल कुछ कुंजियों को उनके मूल्य के साथ रखना चाहता हूं?

मैंने कोशिश की filter:

const data = {
  aaa: 111,
  abb: 222,
  bbb: 333
};

const result = _.filter(data, (value, key) => key.startsWith("a"));

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>

लेकिन यह एक सरणी प्रिंट करता है:

[१११, २२२]

जो मुझे नहीं चाहिए।

इसे कैसे दर्ज करें? या कुछ और अगर लॉश काम नहीं कर रहा है?

जवाबों:


285

लोदाश में एक _.pickByफंक्शन होता है, जो आपको वही दिखता है जो आप खोज रहे हैं।

var thing = {
  "a": 123,
  "b": 456,
  "abc": 6789
};

var result = _.pickBy(thing, function(value, key) {
  return _.startsWith(key, "a");
});

console.log(result.abc) // 6789
console.log(result.b)   // undefined
<script src="https://cdn.jsdelivr.net/lodash/4.16.4/lodash.min.js"></script>


9
ऐसा लगता है कि यह लॉश संस्करण 4 में टूट गया है, और नया _.pickBy विधेय केवल मूल्य नहीं कुंजी के साथ लागू किया गया है। बू :( ... मुझे लगता है कि आप चेन _.pick और _.pickBy (वास्तव में आप कोई समान कार्यक्षमता नहीं प्राप्त कर सकते हैं)
SDK

3
यह अब नवीनतम Lodash के रूप में काम नहीं करता है, बस एक FYI
यूडिस ड्यूरन

8
@ यूडिसड्युरन आपको इस्तेमाल करना होगा.pickBy
एपफ्लोबॉक्स

लगता है कि नवीनतम संस्करण के साथ तय किया गया है

39

बस फ़िल्टर को omitBy में बदलें

const data = { aaa: 111, abb: 222, bbb: 333 };
const result = _.omitBy(data, (value, key) => !key.startsWith("a"));
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>


यह अभी भी एक सरणी प्रिंट नहीं करता है?
Mr_Green

4
धन्यवाद! और मुझे लगता है कि हम उपयोग कर सकते हैं_.pick
फ्रीविंड

यह अब नवीनतम लॉज के रूप में काम नहीं करता है, बस एक FYI करें
यूडिस ड्यूरन

18

यहाँ lodash4.x का उपयोग कर एक उदाहरण दिया गया है :

const data = {
  aaa: 111,
  abb: 222,
  bbb: 333
};

const result = _.pickBy(data, (value, key) => key.startsWith("a"));

console.log(result);
// Object { aaa: 111, abb: 222 }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
<strong>Open your javascript console to see the output.</strong>


4

एक गैर-दर्ज तरीका इसे काफी पठनीय और कुशल तरीके से हल करने के लिए:

function filterByKeys(obj, keys = []) {
  const filtered = {}
  keys.forEach(key => {
    if (obj.hasOwnProperty(key)) {
      filtered[key] = obj[key]
    }
  })
  return filtered
}

const myObject = {
  a: 1,
  b: 'bananas',
  d: null
}

const result = filterByKeys(myObject, ['a', 'd', 'e']) // {a: 1, d: null}
console.log(result)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.