-
-
Save reissbaker/1602419 to your computer and use it in GitHub Desktop.
var selectKeys = function(hash, keys) { | |
var output, prop, index; | |
output = {}; | |
if(!keys) return {}; | |
if(keys instanceof Array) { | |
for(index = 0; index < keys.length; index++) { | |
output[keys[index]] = hash[keys[index]]; | |
} | |
return output; | |
} | |
for(prop in keys) { | |
if(keys.hasOwnProperty(prop)) { | |
if(typeof keys[prop] === 'boolean') { | |
if(keys[prop]) output[prop] = hash[prop]; | |
// if false, don't copy the property | |
} else { | |
output[keys[prop]] = hash[prop]; | |
} | |
} | |
} | |
return output; | |
}; |
Sure thing.
var options = {
some_value: 6,
flying_metal_bird: false
};
var parsedOptions = selectKeys(options, {
some_value: 'someValue',
flying_metal_bird: 'airplane'
});
/*
parsedOptions is now: {
someValue: 6,
airplane: false
}
*/
or, more to the point of why I wrote it:
var paramsFromRuby = <%= stuff_in_a_format_that_some_JS_code_hates%>;
var options = selectKeys(paramsFromRuby, {
feet_in_the_air: 'jumping'
});
Oh I see, it's renaming the keys. Maybe this function would be better named "rename-keys"? I got thrown by the use of "parse" and "options"; "parse options" sounds to me like parsing command-line flags.
Yep. Good point. Renaming it to selectKeys
, made it select (and not remap) keys if given an array, and if given an object can remap them.
Line 4 you can use if (!keys)
instead of checking for undefined. That will catch null
too.
Nice. Changed it. That's a win for compression, too, since typestrings can't be compressed but variable names can.
Line 1 has a syntax error. You can drop the selectKeys:
.
var selectKeys = selectKeys: function(hash, keys) {
That's what I get for copying+pasting out of an object literal.
Can you provide an example of input and output for this function? I don't really understand what it's doing / used for.