2015-06-09 9 views
101

Ich habe ein Objekt mit einigen Schlüsseln, und ich möchte nur einige der Schlüssel mit ihrem Wert behalten?Wie Tasten eines Objekts mit Lodash filtern?

Ich habe versucht, mit filter:

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

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

console.log(result); 

Aber es druckt ein Array:

[111, 222] 

Welche nicht das, was ich will.

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

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

Antwort

152

Lodash hat eine _.pickBy Funktion das ist genau das tut, was 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>

+8

Es scheint, dass dies in lodash Version 4 gebrochen ist, und das neue Prädikat _.pickBy wird nur mit Wert nicht Schlüssel aufgerufen . Boo :(... Ich nehme an, Sie können _.pick und _.pickBy (eigentlich nein, Sie können nicht die gleiche Funktionalität erhalten) – SDK

+2

@SDK Kette wird in 4.0.1 https://github.com/lodash behoben werden/lodash/issues/1765 – ncuillery

+3

Dies funktioniert nicht mehr von der neuesten Lodash, nur ein FYI –

20

Gerade ändern Filter omitBy

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

Enthält diese druckt nicht noch ein Array? –

+1

Danke! Und ich denke, wir können '_.pick' verwenden – Freewind

+0

Dies funktioniert nicht mehr von der neuesten lodash, nur ein FYI –

11

Hier ist ein Beispiel unter Verwendung von 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>