Created
August 28, 2017 03:18
-
-
Save przbadu/aa31fd1a9b658c7a045f05b64be5d225 to your computer and use it in GitHub Desktop.
Lodash useful helper functions that we should use from today.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Using try-catch to handle the JSON.parse error | |
function parse(str){ | |
try { | |
return JSON.parse(str); | |
} | |
catch(e) { | |
return false; | |
} | |
} | |
// With Lodash | |
function parseLodash(str){ | |
return _.attempt(JSON.parse.bind(null, str)); | |
} | |
parse('a'); // false | |
parseLodash('a'); // Return an error object | |
parse('{"name": "colin"}'); // Return {"name": "colin"} | |
parseLodash('{"name": "colin"}'); // Return {"name": "colin"} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/////////////////////////////////////// | |
// Loop through a collection and return a deeply-nested property from each item | |
/////////////////////////////////////// | |
// Fetch the name of the first pet from each owner | |
var ownerArr = [{ | |
"owner": "Colin", | |
"pets": [{"name":"dog1"}, {"name": "dog2"}] | |
}, { | |
"owner": "John", | |
"pets": [{"name":"dog3"}, {"name": "dog4"}] | |
}]; | |
// Array's map method. | |
ownerArr.map(function(owner){ | |
return owner.pets[0].name; | |
}); | |
// Lodash | |
_.map(ownerArr, 'pets[0].name'); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Naive method: Remove an array of keys from object | |
Object.prototype.remove = function(arr) { | |
var that = this; | |
arr.forEach(function(key){ | |
delete(that[key]); | |
}); | |
}; | |
var objA = {"name": "colin", "car": "suzuki", "age": 17}; | |
objA.remove(['car', 'age']); | |
objA; // {"name": "colin"} | |
// Lodash | |
objA = _.omit(objA, ['car', 'age']); // {"name": "colin"} | |
//////////////////// | |
// more usecase | |
//////////////////// | |
var objA = {"name": "colin", "car": "suzuki", "age": 17}; | |
// Lodash | |
objA = _.omit(objA, 'car'); // {"name": "colin", "age": 17}; | |
objA = _.omit(objA, _.isNumber); // {"name": "colin"}; | |
Once |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Naive method: Returning a new object with selected properties | |
Object.prototype.pick = function(arr) { | |
var _this = this; | |
var obj = {}; | |
arr.forEach(function(key){ | |
obj[key] = _this[key]; | |
}); | |
return obj; | |
}; | |
var objA = {"name": "colin", "car": "suzuki", "age": 17}; | |
var objB = objA.pick(['car', 'age']); | |
// {"car": "suzuki", "age": 17} | |
// Lodash | |
var objB = _.pick(objA, ['car', 'age']); | |
// {"car": "suzuki", "age": 17} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Get a random number between 15 and 20. | |
// Naive utility method | |
function getRandomNumber(min, max){ | |
return Math.floor(Math.random() * (max - min + 1)) + min; | |
} | |
getRandomNumber(15, 20); | |
// Lodash | |
_.random(15, 20); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var luckyDraw = ["Colin", "John", "James", "Lily", "Mary"]; | |
function pickRandomPerson(luckyDraw){ | |
var index = Math.floor(Math.random() * (luckyDraw.length)); | |
return luckyDraw[index]; | |
} | |
pickRandomPerson(luckyDraw); // John | |
// Lodash | |
_.sample(luckyDraw); // Colin | |
/////////// multiple random item | |
var luckyDraw = ["Colin", "John", "James", "Lily", "Mary"]; | |
// Lodash - Getting 2 random item | |
_.sample(luckyDraw, 2); // ['John','Lily'] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Adding extend function to Object.prototype | |
Object.prototype.extend = function(obj) { | |
for (var i in obj) { | |
if (obj.hasOwnProperty(i)) { | |
this[i] = obj[i]; | |
} | |
} | |
}; | |
var objA = {"name": "colin", "car": "suzuki"}; | |
var objB = {"name": "james", "age": 17}; | |
objA.extend(objB); | |
objA; // {"name": "james", "age": 17, "car": "suzuki"}; | |
// Lodash | |
_.assign(objA, objB); | |
//////////////////////////////////////////////// | |
// Extending multiple objects | |
//////////////////////////////////////////////// | |
var objA = {"name": "colin", "car": "suzuki"}; | |
var objB = {"name": "james", "age": 17}; | |
var objC = {"pet": "dog"}; | |
// Lodash | |
_.assign(objA, objB, objC) | |
// {"name": "james", "car": "suzuki", "age": 17, "pet": "dog"} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
///////////////////// | |
// 1. Loop for N times | |
//////////////////// | |
// 1. Basic for loop. | |
for(var i = 0; i < 5; i++) { | |
// .... | |
} | |
// 2. Using Array's join and split methods | |
Array.apply(null, Array(5)).forEach(function(){ | |
// ... | |
}); | |
// Lodash | |
_.times(5, function(){ | |
// ... | |
}); | |
///////////////////////////////////////////////// | |
// 2. Create an array of N size and populate them with unique values of the same prefix | |
///////////////////////////////////////////////// | |
// Create an array of length 6 and populate them with unique values. The value must be prefix with "ball_". | |
// eg. [ball_0, ball_1, ball_2, ball_3, ball_4, ball_5] | |
// Array's map method. | |
Array.apply(null, Array(6)).map(function(item, index){ | |
return "ball_" + index; | |
}); | |
// Lodash | |
_.times(6, _.uniqueId.bind(null, 'ball_')); | |
// GET rid of the .bind(null, ...) | |
_.times(6, _.partial(_.uniqueId, 'ball_')); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment