Skip to content

Instantly share code, notes, and snippets.

@darrentorpey
Created May 23, 2013 17:25
Show Gist options
  • Save darrentorpey/5637799 to your computer and use it in GitHub Desktop.
Save darrentorpey/5637799 to your computer and use it in GitHub Desktop.
A CodePen by Darren Torpey. Real-world-y underscore.js example
function report(name, data) {
console.log('===============');
console.log(name, data);
console.log(JSON.stringify(data));
}
var jsonData = [
{
id: 1,
name: 'Darren',
role: 'Developer'
},
{
id: 2,
name: 'Audrey',
role: 'Developer'
},
{
id: 3,
name: 'Eric',
role: 'QA'
},
{
id: 5,
name: 'Mike',
role: 'Developer'
},
{
id: 6,
name: 'Bev',
role: 'PM'
},
{
id: 6,
name: 'Frank',
role: 'PM'
},
{
id: 12,
name: 'Bryan',
role: 'QA'
}
];
report('Start:', jsonData);
var techLookup = _.reduce(jsonData, function(newObj, pair) {
newObj[pair.name] = pair;
return newObj;
}, {});
report('techLookup:', techLookup);
/*
{
"Darren":{
"id":1,
"name":"Darren",
"role":"Developer"
},
"Audrey":{
"id":2,
"name":"Audrey",
"role":"Developer"
},
"Eric":{
"id":3,
"name":"Eric",
"role":"QA"
},
"Mike":{
"id":5,
"name":"Mike",
"role":"Developer"
},
"Bev":{
"id":6,
"name":"Bev",
"role":"PM"
},
"Frank":{
"id":6,
"name":"Frank",
"role":"PM"
},
"Bryan":{
"id":12,
"name":"Bryan",
"role":"QA"
}
}
*/
var roleLookup = _.reduce(jsonData, function(roleMap, person) {
roleMap[person.role] = roleMap[person.role] || [];
roleMap[person.role].push(person);
return roleMap;
}, {});
report('roleLookup', roleLookup);
/*
{
"Developer":[
{
"id":1,
"name":"Darren",
"role":"Developer"
},
{
"id":2,
"name":"Audrey",
"role":"Developer"
},
{
"id":5,
"name":"Mike",
"role":"Developer"
}
],
"QA":[
{
"id":3,
"name":"Eric",
"role":"QA"
},
{
"id":12,
"name":"Bryan",
"role":"QA"
}
],
"PM":[
{
"id":6,
"name":"Bev",
"role":"PM"
},
{
"id":6,
"name":"Frank",
"role":"PM"
}
]
}
*/
var uberRoleLookup = _.reduce(jsonData, function(roleMap, person) {
roleMap[person.role] = roleMap[person.role] || {};
roleMap[person.role][person.name] = person;
return roleMap;
}, {});
report('uberRoleLookup', uberRoleLookup);
/*
{
"Developer":{
"Darren":{
"id":1,
"name":"Darren",
"role":"Developer"
},
"Audrey":{
"id":2,
"name":"Audrey",
"role":"Developer"
},
"Mike":{
"id":5,
"name":"Mike",
"role":"Developer"
}
},
"QA":{
"Eric":{
"id":3,
"name":"Eric",
"role":"QA"
},
"Bryan":{
"id":12,
"name":"Bryan",
"role":"QA"
}
},
"PM":{
"Bev":{
"id":6,
"name":"Bev",
"role":"PM"
},
"Frank":{
"id":6,
"name":"Frank",
"role":"PM"
}
}
}
*/
var controversialRoleLookup = _.reduce(jsonData, function(roleMap, person) {
roleMap = _.defaults(roleMap, _.object([[person.role, {}]]));
roleMap[person.role][person.name] = person;
return roleMap;
}, {});
report('controversialRoleLookup', controversialRoleLookup);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment