2015-06-09 17 views
101

Mam obiekt z niektórymi kluczami i chcę zachować tylko niektóre klucze z ich wartością?Jak filtrować klucze obiektu za pomocą Lodasha?

Próbowałem z filter:

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

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

console.log(result); 

Ale drukuje tablicy:

[111, 222] 

co nie jest to, co chcę.

Jak zrobić to z lodash? Lub coś innego, jeśli nie działa lodash?

żywo demo: http://jsbin.com/moqufevigo/1/edit?js,output

Odpowiedz

152

Lodash ma _.pickBy funkcję który robi dokładnie to, czego szukasz.

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

Wygląda na to, że jest on uszkodzony w lodash w wersji 4, a nowy predykat _.pickBy jest wywoływany tylko z wartością bez klucza . Boo :(... Przypuszczam, że możesz połączyć _.pick i _.pickBy (tak naprawdę nie możesz uzyskać tej samej funkcjonalności) – SDK

+2

@SDK zostanie naprawiony w wersji 4.0.1 https://github.com/lodash/lodash/issues/1765 – ncuillery

+3

To nie działa już od najnowszego Lodasha, tylko FYI –

20

filtr zmiana Wystarczy omitBy

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

Nie to nadal drukuje tablicę? –

+1

Dzięki! I myślę, że możemy użyć '_.pick' – Freewind

+0

To już nie działa tak jak z najnowszym lodash, tylko FYI –

11

Oto przykład przy użyciu 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>

Powiązane problemy