一、数组分块
- 数组分块,将数组拆分成多个
size
长度的区块,每个区块组成小数组,整体成一个二维数组。 - 数组分块的实现,代码如下所示:
export function chunk (arr, size=1) {
if (arr.length === 0) {
return [];
}
let result = [];
let tmp = [];
arr.forEach(item => {
if (tmp.length === 0) {
result.push(tmp);
}
tmp.push(item);
if (tmp.length === size) {
tmp = [];
}
});
return result;
}
- 手写函数数组分块的应用,代码如下所示:
console.log(chunk([1,2,3,4,5,6,7]));
二、数组差集
- 数组差集,得到当前数组中所有不在
arr
中的元素组成的数组,不改变原数组。 - 数组差集的实现,代码如下所示:
export function difference (arr1, arr2=[]) {
if (arr1.length === 0) {
return [];
}
if (arr2.length === 0) {
return arr1.slice();
}
const result = arr1.filter(item => !arr2.includes(item));
return result;
}
- 手写函数数组差集的应用,代码如下所示:
console.log(difference([1,3,5,7], [5, 8]));
console.log(difference([1,3,5,7]));
三、删除数组某些元素
- 删除数组某些元素,有两种方法,如下所示:
pull(array, ...values)
,删除原数组中与value
相同的元素,返回所有删除元素的数组pullAll(array,values)
,功能与all
一致,只是参数变为数组
- 删除数组某些元素的实现,代码如下所示:
function pull (arr, ...args) {
const result = [];
for(let i=0;i<arr.length;i++) {
if (args.includes(arr[i])) {
result.push(arr[i]);
arr.splice(i, 1);
i--;
}
}
return result;
}
function pullAll (arr, values) {
return pull(arr, ...values);
}
- 手写函数删除数组某些元素的应用,代码如下所示:
let arr = [1,3,5,7,9,2,3,5];
console.log(pull(arr, 2,3,7));
console.log(pullAll(arr, [2,3,7]));
console.log(arr);
四、获取数组某些元素
- 获取数组某些元素,有两种方法,如下所示:
drop(array,count)
,得到当前数组过滤左边count
个后剩余元素组成的数组dropRight(array, count)
,得到当前数组过滤右边count
个后剩余元素组成的数组
- 获取数组某些元素的实现,代码如下所示:
export function drop (arr, size) {
return arr.filter((value, index) => index >= size);
}
export function dropRight (arr, size) {
return arr.filter((value, index) => index < arr.length - size);
}
- 手写函数获取数组某些元素的应用,代码如下所示:
console.log(drop([1,3,5,7,9,11], 2));
console.log(dropRight([1,3,5,7,9,11], 2));