it-swarm.com.de

Wie filtere ich Schlüssel eines Objekts mit lodash?

Ich habe ein Objekt mit einigen Schlüsseln und möchte nur einige der Schlüssel mit ihrem Wert behalten.

Ich habe es mit filter versucht:

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

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

console.log(result);

Aber es gibt ein Array aus:

[111, 222]

Welches ist nicht was ich will.

Wie mache ich das mit lodash? Oder etwas anderes, wenn lodash nicht funktioniert?

Live-Demo: http://jsbin.com/moqufevigo/1/edit?js,output

151
Freewind

Lodash hat ein _.pickBy Funktion , die genau das tut, wonach Sie suchen.

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>
240
serg10

Ändern Sie einfach den Filter auf omitBy

 var result = _.omitBy(data, function(value, key) {
     return !key.startsWith("a");
 })
34

Hier ist ein Beispiel mit lodash 4.x:

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

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

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

Eine unkomplizierte Methode, um dieses Problem auf eine gut lesbare und effiziente Weise zu lösen:

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
}

filterByKeys(myObject, ['a', 'd', 'e']) // {a: 1, d: null}
2
thomax