Remap properties name and values using lodash

前端 未结 2 1953
刺人心
刺人心 2021-01-02 20:57

I have this array:

aItems = [{
    \"PropertyA\": \"apple\",
    \"PropertyB\": \"banana\",
    \"PropertyC\": \"dog\",
    \"PropertyD\": \"hotdog\",
    \"         


        
相关标签:
2条回答
  • 2021-01-02 21:20

    Create a mapping of old and new keys, like this

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

    and also a mapping of old and new values, like this

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

    And then using _.map and _.transform, you can transform the 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;
        });
    });
    
    0 讨论(0)
  • 2021-01-02 21:33

    Yes, since lodash v3.8.0 you can remap objects in any way desireable

    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)
    

    ES2015/ES6 code

    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)
    
    0 讨论(0)
提交回复
热议问题