Name and values โ€‹โ€‹of remap properties using lodash

I have this array:

aItems = [{ "PropertyA": "apple", "PropertyB": "banana", "PropertyC": "dog", "PropertyD": "hotdog", "PropertyE": "coldcat", "PropertyF": "Y", "PropertyG": "N" }, ..., { "PropertyA": "this", "PropertyB": "is", "PropertyC": "json", "PropertyD": "code", "PropertyE": "wow", "PropertyF": "N", "PropertyG": "N" }] 

I would like to use lodash to get this result:

 aItems = [{ "propertyA": "apple", "propertyB": "banana", "propertyC": "dog", "propertyD": "hotdog", "propertyE": "coldcat", "propertyNEW": true, "propertyG": false }, ..., { "propertyA": "this", "propertyB": "is", "propertyC": "json", "propertyD": "code", "propertyE": "wow", "propertyNEW": false, "propertyG": false }] 

I want to map each property name to different names and change the value for some specific properties. Can I do this with lodash?

+6
javascript lodash
Jun 19 '15 at 14:02
source share
2 answers

Create a mapping of old and new keys, for example

 var keyMapping = {'PropertyA': 'propertyA', ..., 'PropertyF': 'propertyNEW'} 

as well as displaying old and new values, such as

 var valueMapping = {'Y': true, 'F': false} 

And then using _.map and _.transform , you can transform an object like this

 var result = _.map(allItems, function(currentObject) { return _.transform(currentObject, function(result, value, key) { if (key === 'PropertyF' || key === 'PropertyG') { value = valueMapping(value); } result[keyMapping[key]] = value; }); }); 
+4
Jun 19 '15 at 14:14
source share

Yes, since lodash v3.8.0 you can reassign objects to whatever you want

ES5 Code

 var items = [ { oldKey: 'oldValue' /*...*/ } ] var keyMapping = { oldKey: 'newKey' /*...*/ } var valueMapping = { oldValue: 'newValue' /*...*/ } var remapper = function(item){ return _(item) // lodash chain start .mapKeys( function(v, k){ return keyMapping[k] } ) .mapValues( function(v){ return valueMapping[v] } ) .value() // lodash chain end } var remappedItems = items.map(remapper) 

Code ES2015 / ES6

 let items = [ { oldKey: 'oldValue' /*...*/ } ] let keyMapping = { oldKey: 'newKey' /*...*/ } let valueMapping = { oldValue: 'newValue' /*...*/ } let remapper = item => _(item) // lodash chain start .mapKeys( (v, k)=> keyMapping[k] ) .mapValues( v => valueMapping[v] ) .value() // lodash chain end let remappedItems = items.map(remapper) 
+10
May 23 '16 at 10:53
source share



All Articles