2016-01-15 3 views
5

Diese answer, unten gezeigt, ist jetzt in lodash v4 gebrochen, soweit ich das beurteilen kann.Wie man _.pick Funktionalität in lodash Version 4 bekommt

var thing = { 
    "a": 123, 
    "b": 456, 
    "abc": 6789 
}; 

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

console.log(result.abc) // 6789 
console.log(result.b) // undefined 

Wie machen Sie das in Version 4 von lodash?

Antwort

0

Hm, es ist nicht dokumentiert, dass _.startsWith() aus Lodash entfernt wurde.

So oder so, wie wäre es mit dem ersten Zeichen des Schlüssels?

var result = _.pick(thing, function(value, key) { 
    return key[0] == "a"; 
}); 
+0

_.pick() in v4 ist nicht mehr ein Prädikat akzeptieren. Das macht _PickBy jetzt. Siehe meine Antwort für weitere Details. – NicBright

2

Update (08. Februar)

Seit v4.0.1, _.omitBy und _.pickBy jetzt einen Schlüssel param zum Prädikat liefern. Daher jetzt die richtige Antwort ist:

Verwenden _.pickBy(object, [predicate=_.identity])

Original-Antwort

mit v4 Start wurden einige Verfahren aufgeteilt. Zum Beispiel wurde _.pick() in _.pick(array, [props]) und _.pickBy(object, [predicate=_.identity])

aufgeteilt Mein erster Ansatz war diese _.pickBy() Methode zu versuchen. Leider wird allen ...By() Methoden nur der Wert als erstes Argument übergeben. Sie werden nicht den Schlüssel oder die Sammlung erhalten. Deshalb funktioniert es nicht, indem einfach von _.pick() zu _.pickBy() gewechselt wird.

Allerdings können Sie es wie folgt tun:

var thing = { 
    "a": 123, 
    "b": 456, 
    "abc": 6789 
}; 

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

console.log(result) 
+0

Yup ich habe das gleiche versucht, mit _.pick und _.pickBy Verkettung - ohne Erfolg. Ich gebe dir einen für Einfallsreichtum - aber kann das nicht als elegante Antwort akzeptieren. Meiner Meinung nach haben sie Funktionalität tatsächlich entfernt. – SDK