-
-
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; | |
}; |
Can you provide an example of input and output for this function? I don't really understand what it's doing / used for.
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.
Call like this:
or,
The keys are what the keys in the input value are; the values are what they should be remapped to.
For convenience in the remapping version, if the key in the output should be the same as the key in the input, you can do:
Passing in
false
skips the key entirely, although a more concise way to do that would be to not include the key name at all.