文 / 西打藍 Siddharam
lodash
這次來挑選常用的 lodash function,嘗試自己手寫。
lodash 的 GitHub 有他們的實作方式,練習過後可以去比較兩邊程式碼有何差異。
練習
(1) dropRight(array, 從右邊移除多少個數)
_.dropRight([1, 2, 3], 2);
// => [1]
function drop (array, count) {
return array.slice(0, array.length-count)
}
drop([1,2,3,4,5,6,7,8], 2)
// [1, 2, 3, 4, 5, 6]
(2) findIndex(array, 找到符合條件的 index)
var users = [
{ 'user': 'barney', 'active': false },
{ 'user': 'fred', 'active': false },
{ 'user': 'pebbles', 'active': true }
];
_.findIndex(users, function(o) { return o.user == 'barney'; });
// => 0
_.findIndex(users, { 'user': 'fred', 'active': false });
// => 1
var users = [
{ 'user': 'barney', 'active': false },
{ 'user': 'fred', 'active': false },
{ 'user': 'pebbles', 'active': true }
]
function findIndex(array, types){
for(let i=0; i < array.length; i++){
if(array[i].user == types.user && array[i].active == types.active){
return i
}
}
}
findIndex(users, { 'user': 'barney', 'active': false })
// 0
(3) pull(array, 去除哪些 value)
var array = ['a', 'b', 'c', 'a', 'b', 'c'];
_.pull(array, 'a', 'c');
// => ['b', 'b']
function pull(array, ...remove){
let newArray = [];
for(let i=0; i < array.length; i++){
for(let j=0 ; j < remove.length; j++){
if(array[i] == remove[j]){
newArray.push(i)
}
}
}
for(let k=newArray.length; k>0; k--){
array.splice(newArray[k-1],1)
}
return array
}
pull(['a','c','e','g','h','a'],'a','b','c','j','z')
// ["e", "g", "h"]
(4) reverse(反轉哪些 array)
var array = [1, 2, 3];
_.reverse(array);
// => [3, 2, 1]
function reverse(array){
let newArray = [];
for(let i=array.length; i>0; i--){
newArray.push(array[i-1])
}
return newArray
}
reverse(['1','2','3','4'])
// ["4", "3", "2", "1"]
(5) shuffle(array 洗牌)
_.shuffle([1, 2, 3, 4]);
// => [4, 1, 3, 2]
function shuffle(array){
for(let i=0 ; i < array.length; i++){
var rand = Math.floor(Math.random() * array.length)
var temp = array[rand]
array[rand] = array[i]
array[i] = temp
}
return array
}
shuffle([1,2,3,4,5])
// [1, 3, 5, 4, 2] random
閱讀量次
聯絡與合作
訂閱電子報,領「我當前 10+ 以上收入源有哪些」一文。
有文字採訪、網站開發,或是諮詢需求,皆可至個人網站參考作品,並聯繫 IG。
或是想分享心情、聊聊天、交朋友,可以來秘密通道找我唷。
Email: frank@siddharam.com