2015-06-09 11 views
101

Ho un oggetto con alcune chiavi, e voglio mantenere solo alcune chiavi con il loro valore?Come filtrare le chiavi di un oggetto con lodash?

ho provato con filter:

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

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

console.log(result); 

ma stampa un array:

[111, 222] 

che non è quello che voglio.

Come fare con lodash? O qualcos'altro se lodash non funziona?

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

risposta

152

Lodash ha una funzione che fa esattamente quello che stai cercando per _.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>

+8

Sembra che questo sia rotto in lodash versione 4, e il nuovo predicato _.pickBy viene invocato solo con valore non chiave . Boo :(... Suppongo che tu possa concatenare _.pick e _.pickBy (in realtà no non puoi ottenere la stessa funzionalità) – SDK

+2

@SDK sarà risolto in 4.0.1 https://github.com/lodash/lodash/issues/1765 – ncuillery

+3

Questo non funziona più a partire dall'ultimo Lodash, solo un FYI –

20

Proprio filtro modifica omitBy

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

Questo non stampa ancora un array? –

+1

Grazie! E penso che possiamo usare '_.pick' – Freewind

+0

Questo non funziona più come l'ultimo lodash, solo un FYI –

11

Ecco un esempio di utilizzo 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>