underscore react examples javascript filter lodash

javascript - examples - lodash react



¿Cómo filtrar las claves de un objeto con lodash? (4)

Tengo un objeto con algunas claves y solo quiero conservar algunas de sus claves con su valor.

Intenté con filter :

var data = { "aaa":111, "abb":222, "bbb":333 }; var result = _.filter(data, function(value, key) { return key.startsWith("a"); }) console.log(result);

Pero imprime una matriz:

[111, 222]

Que no es lo que quiero.

¿Cómo hacerlo con lodash? ¿O algo más si lodash no funciona?

Demostración en vivo: http://jsbin.com/moqufevigo/1/edit?js,output


Aquí hay un ejemplo usando 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>


Simplemente cambie el filtro a omitBy

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


Una forma no loda de resolver esto de una manera bastante legible y eficiente:

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}


Lodash tiene una función _.pickBy que hace exactamente lo que estás buscando.

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>