2016-04-25 21 views
4

Ich habe gerade begonnen, mit lodash und haben dieses Array von Objekten, wo eine der Eigenschaften entweder eine ganze Zahl oder null ist. Ich weiß, wie das Array nach Elementen gefiltert wird, die null sind, aber wie überprüfe ich, ob es nicht null ist?Lodash: Filter Array von Objekten und überprüfen, ob nicht Null

Lassen Sie uns sagen, dass ich so etwas wie dieses:

var users = [ 
    { 'user': 'barney', 'default': 1 }, 
    { 'user': 'dino', 'default': 0 }, 
    { 'user': 'wilma', 'default': 1 }, 
    { 'user': 'fred', 'default': null } 
]; 

Und dann will ich so etwas wie:

var notNullDefault = _.filter(sourceData, ['is_default', ! null ]); // objects with names barney, dino, wilma 
var nullDefault = _.filter(sourceData, ['is_default', null ]); // object with name fred 

Noch einmal, ich bin neu in lodash, vielleicht ist es eine bessere Art und Weise zu erreichen, Das auch.

Vielen Dank im Voraus.

Antwort

15

Dies kann mit _.reject und _.filter gelöst werden

+0

Perfekt. Suche nach der Parallele für Angulars $ -Filter ('filter') (Sammlung, {'default': '! SomeValue'}) '. – Cody

0

Versuchen Sie, mit so etwas wie dieses:

var notNullDefault = _.filter(users, function(elem) { return elem.default !== null; }); 
var nullDefault = _.filter(users, function(elem) { return o.default === null; }); // object with name fred 

Das zurückgegebene Array enthält nur die Elemente, für die die Callback-Funktion true zurückgibt.

Oder, wie sie es in the fine manual setzen: Iterates über Elemente der Sammlung, Rückgabe eines Array aller Elemente Prädikat zurückgibt truthy für. Das Prädikat wird mit drei Argumenten aufgerufen: (value, index | key, collection).

+1

Sie könnten beachten wollen, dass Sie die Behandlung von 'null' und' undefined' als gleichwertig hier. –

1

Sie könnten ein paar Prädikatfunktionen erstellen, die für Standard überprüfen und nicht die Benutzer des Standard:

var isDefaultUser = function(user){ 
    return _.isNull(user.default); 
} 

var isNotdefaultUser = _.negate(isDefaultUser); 

Sie können

var defaultUser = _.filter(users, isDefaultUser); 

var notDefaultUsers = _.filter(users, isNotdefaultUser); 

// partition will be an array; first element contains the default users 
// second element contains the non default users 
var parition = _.partition(users, isDefaultUser); 
0

zum Filtern usw. dann verwendet werden, glaube ich, diese Bibliotheken sind manchmal nur Zeitverschwendung. Anstatt ein bibliotheksabhängiges spezifisches Abstract zu lernen, ist es am besten, die ES6-Array-Funktionen zusammen mit Pfeilen gut zu nutzen. Also hier gehst du;

var notNullDefault = _.reject(sourceData, ['default', null]); 

var nullDefault = _.filter(sourceData, ['default', null]); 

DEMO

0

:

var users = [ 
 
      { 'user': 'barney', 'default': 1 }, 
 
      { 'user': 'dino', 'default': 0 }, 
 
      { 'user': 'wilma', 'default': 1 }, 
 
      { 'user': 'fred', 'default': null } 
 
      ], 
 
userNull = [], 
 
userFull = []; 
 
users.forEach(e => e.default == void 0 ? userNull.push(e) : userFull.push(e)); 
 

 
document.write("<pre> userNull:\n" + JSON.stringify(userNull, null, 2) + "</pre>"); 
 
document.write("<pre> userFull:\n" + JSON.stringify(userFull, null, 2) + "</pre>");

Verwandte Themen