# mapKeys
> Map keys from one object to a new object having the same values.
## Usage
```javascript
var mapKeys = require( '@stdlib/utils/map-keys' );
```
#### mapKeys( obj, transform )
Map keys from one `object` to a new `object` having the same values.
```javascript
function transform( key, value ) {
return key + value;
}
var obj1 = {
'a': 1,
'b': 2
};
var obj2 = mapKeys( obj1, transform );
// returns { 'a1': 1, 'b2': 2 }
```
The `transform` function is provided three arguments:
- `key`: object key
- `value`: object value corresponding to `key`
- `obj`: the input object
## Notes
- Key iteration order is **not** guaranteed, as `object` key enumeration is not specified according to the [ECMAScript specification][ecma-262-for-in]. In practice, however, most engines use insertion order to sort an `object`'s keys, thus allowing for deterministic return values.
- The function only maps **own** properties. Hence, the function does **not** map inherited properties.
- The function **shallow** copies key values.
- The value returned by a `transform` function should be a value which can be serialized as an `object` key.
## Examples
```javascript
var mapKeys = require( '@stdlib/utils/map-keys' );
function transform( key, value ) {
return key + ':' + value;
}
var obj1 = {
'a': 'beep',
'b': 'boop',
'c': 'foo',
'd': 'bar'
};
var obj2 = mapKeys( obj1, transform );
console.dir( obj2 );
// => { 'a:beep': 'beep', 'b:boop': 'boop', 'c:foo': 'foo', 'd:bar': 'bar' }
```
[ecma-262-for-in]: http://www.ecma-international.org/ecma-262/5.1/#sec-12.6.4