Search code examples
javascriptunderscore.jslodash

Map over object preserving keys


The map function in underscore.js, if called with a javascript object, returns an array of values mapped from the object's values.

_.map({one: 1, two: 2, three: 3}, function(num, key){ return num * 3; });
=> [3, 6, 9]

is there a way to make it preserve the keys? ie, I want a function that returns

{one: 3, two: 6, three: 9}

Solution

  • With Underscore

    Underscore provides a function _.mapObject to map the values and preserve the keys.

    _.mapObject({ one: 1, two: 2, three: 3 }, function (v) { return v * 3; });
    
    // => { one: 3, two: 6, three: 9 }
    

    DEMO


    With Lodash

    Lodash provides a function _.mapValues to map the values and preserve the keys.

    _.mapValues({ one: 1, two: 2, three: 3 }, function (v) { return v * 3; });
    
    // => { one: 3, two: 6, three: 9 }
    

    DEMO