2015-06-19 15 views
6

proprietà ho questa matrice:Remap nome e valori utilizzando lodash

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" 
}] 

Vorrei uso lodash per ottenere questo risultato:

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 
}] 

voglio mappare ogni nome di proprietà con altri nomi e modificare il valore per alcune proprietà specifiche. Posso farlo usando lodash?

risposta

4

Creare una mappatura dei tasti di vecchi e nuovi, come questo

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

e anche una mappatura dei valori vecchi e nuovi, come questo

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

e quindi utilizzando _.map e _.transform, si può trasformare l'oggetto, come questo

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; 
    }); 
}); 
10

Sì, dal momento che v3.8.0 lodash si c un oggetti rimappare in alcun modo desiderabile codice

ES5

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) 

ES2015/code 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) 
Problemi correlati