用jq实现lodash的功能[1]

本文是准备将所有的lodash.js的相关方法用jquery去实现,目的是为了巩固自己所学知识,计划是每两天更新五个代码,如果有比较难的,会根据难易度,减少代码量。希望能帮助到正在学习前端的你。

在没有找到工作之前,面试了一家公司,因为没有相关工作经验被拒,面试的过程中,面试官竟然当着我的面玩起了手机游戏,这对我感触很深,也许没有经验,没有能力,就会被别人瞧不起,我不愿意做一个别人瞧不起的人,我想成为一个能够努力改变现状的人,想证明自己,不比别人弱,别人能做的,我也照样能做到。

以后,在饭桌上,也没有人敢在我夹菜的时候转桌子,是我最近5年的计划!!哈哈哈!

代码一

_.chunk(array,[size=1])

解释

将array拆分成多个size长度的快,把这些快组成一个新数组。如果array无法被分割成全部等长的快,那么最后剩余的元素将组成一个块

参数
  1. array(Array):需要被处理的数组
  2. [size = 1] (number):每个块的长度
返回值

数组:返回一个包含拆分块数组的新数组

例子
1
2
_.chunk(['a','b','c','d'], 2)
// =>[['a','b'],['c','d']]
JQ实现方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function _chunk(arr,idx){
var newarr = []
chunk(arr,idx)
function chunk(arr,idx){
if(arr.length > idx){
let a = arr.slice(0,idx)
newarr.push(a)
arr.splice(0,idx)
chunk(arr,idx)
}else{
newarr.push(arr)
}
}
return newarr
}

代码二

_.compact(array)

解释

创建一个新数组并包含原数组中所有的非假值元素。例如 false、null、 0、””、undefined 和 NaN 都是“假值”。

参数
  1. array (Array): 数组参数.
返回值

(Array): 返回过滤假值后的数组.

例子
1
2
_.compact([0, 1, false, 2, '', 3]);
// => [1, 2, 3]
jQ实现方式
1
2
3
4
5
6
7
8
9
function oldCompact(arr){
var fun = []
arr.forEach(function(e){
if(e.length>0 || e){
fun.push(e)
}
})
return fun
}

代码三

_.difference(array, [values])

解释

提供两个数组,第二个数组是一个过滤器,当第一个数组中有第二个数组里的值得话,就会在第一个数组中删除该值

参数

array (Array): 需要过滤的数组
[values] (…Array): 数组需要排除掉的值

返回值

(Array): 返回过滤后的数组

例子
1
2
3
4
_.difference([1, 2, 3], [4, 2]);
// => [1, 3]
_.difference([1, '2', 3], [4, 2]);
// => [1, "2", 3]
JQ实现方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function _difference(arr1,arr2){
let num = []
arr1.forEach(function(e){
arr2.forEach(function(i){
if(e == i){
num.push(e)
}
})
})
num.forEach(function(g){
for(let i = 0;i<arr1.length;i++){
if(arr1[i] == g){
arr1.splice(i,1)
}
}
})
return arr1
}

代码四

_.difference(array, [values])

解释

将 array 中的前 n 个元素去掉,然后返回剩余的部分。

参数

array (Array): 需要操作的数组
[n=1] (number): 去掉的元素个数

返回值

(Array): 返回array的剩余部分

例子
1
2
3
4
5
6
7
8
9
10
11
_.drop([1, 2, 3]);
// => [2, 3] 默认是1开始的
_.drop([1, 2, 3], 2);
// => [3]
_.drop([1, 2, 3], 5);
// => []
_.drop([1, 2, 3], 0);
// => [1, 2, 3]
JQ实现方法
1
2
3
4
5
6
7
8
9
10
function _drop(arr){
let len = arr.length
if(!arguments[1] && arguments[1] != 0){
let newArr = arr.splice(1,len)
return newArr
}else{
newArr = arr.splice(arguments[1],len)
return newArr
}
}

代码五

_.difference(array, [n=1])

解释

将 array 中的尾部 n 个元素去掉,然后返回剩余的部分。

参数

array (Array): 需要操作的数组
[n=1] (number): 去掉的元素个数

返回值

(Array): 返回array的剩余部分

例子
1
2
3
4
5
6
7
8
9
10
11
_.dropRight([1, 2, 3]);
// => [1, 2]
_.dropRight([1, 2, 3], 2);
// => [1]
_.dropRight([1, 2, 3], 5);
// => []
_.dropRight([1, 2, 3], 0);
// => [1, 2, 3]
JQ实现方法
1
2
3
4
5
6
7
8
9
10
function _dropRight(arr){
let len = arr.length
if(!arguments[1] && arguments[1] != 0){
arr.splice(len-1,len)
return arr
}else{
arr.splice(len-arguments[1],len)
return arr
}
}