underscore example debounce array javascript underscore.js

javascript - example - Función Underscore.js_.map: omite un valor



underscore js cdn (7)

Aquí hay otra manera. Este hace uso de la función de composición en el guión bajo. ¿Por qué componer? Compose está respaldado por la teoría de la categoría en matemáticas. De esta manera también es libre de puntos.

var pluckMyProp = function(array) { return _.pluck(array, ''myProperty'') } var reject = function(array) { return _.reject(array, function(element) { return element[''ignore''] === true }) } var finalArray = _.compose(pluckMyProp, reject) var data = [{myProperty: 1, ignore: false}, {ignore: true}, {myProperty: 2}] finalArray(data) //=> [1,2]

Estoy tratando de usar la función underscore.js _.map en una matriz de objetos, para obtener una matriz con una propiedad de cada objeto. Ese es el escenario habitual, entonces:

var finalArray = _.map(myArray, function(obj) { return obj.myProperty; });

Pero en algunos casos necesito que no se agregue nada en la matriz. Podría ser algo como:

var finalArray = _.map(myArray, function(obj) { if (!obj.ignore) { return obj.myProperty; } });

El resultado de esto es que se inserta un valor undefined en la matriz, que no es lo mismo que no empujar nada en absoluto.

¿Hay una manera para que la función de mapa no presione un valor, o necesito postprocesar mi finalArray para eliminar los undefined no deseados?


Esto se puede hacer usando solo métodos de subrayado, estilo sin puntos :

var finalArray = _.chain(myArray) .reject(''ignore'') .pluck(''myProperty'') .value();


Podrías usar reducir:

myArray.reduce(function (acc, obj) { if (!obj.ignore) { acc.push(obj.myProperty); } return acc; }, []);

o con lodash:

_.reduce(myArray, function (acc, obj) { if (!obj.ignore) { acc.push(obj.myProperty); } return acc; }, []);


Trate de usar el compact() de lodash compact() . Crea una matriz con todos los valores de falsey eliminados. Por lo tanto, los valores false , null , 0 , "" , undefined y NaN se eliminan.

https://lodash.com/docs#compact

Lo estoy usando, está muy limpio.


debe usar _.filter () antes de _.map ()

var filteredArray = _.filter(myArray,function(obj) { return !obj.ignore; }); var finalArray = _.map(filteredArray, function(obj) { return obj.myProperty; });


.map asignará un nuevo valor a la matriz, puede usar .filter para filtrar la matriz. Para tu información, puedes usar .pluck para asignar una propiedad desde un objeto:

_.chain(myArray).filter(function(obj) { return !obj.ignore; }).pluck(''myProperty'').value();

También puedes usar .where como este:

_.chain(myArray).where({ignore: false}).pluck(''myProperty'').value();

O:

_.pluck(_.where(myArray, {ignore: false}), ''myProperty'');


Entonces, esto significa que quieres filtrar, luego mapea tu matriz.

Para hacer esto en forma de underscore , deberá pasar su matriz a esta canalización:

myArray -> filtro -> mapa -> finalArray

var isIncluded = function(obj){ return !obj.ignore } var takeProperty = function(obj){ return obj.myProperty } var finalArray = _.map( _.filter(myArray, isIncluded), takeProperty );