下面的方法就是基本实现,没有进行健壮性判断,请大家见谅
chunk
- 说明
将数组(array)拆分成多个 size 长度的区块,并将这些区块组成一个新数组。 如果array 无法被分割成全部等长的区块,那么最后剩余的元素将组成一个区块。 - 参数
array (Array): 需要处理的数组
[size=1] (number): 每个数组区块的长度 - 返回
(Array): 返回一个包含拆分区块的新数组(相当于一个二维数组)。
function chunk (array, size) {
const _arr = []
const _array = array.slice(0)
for (let i = _array.length; i >= 0; i--) {
const res = _array.splice(0, size)
if (res.length > 0) {
_arr.push(res)
}
}
return _arr
}
compact
- 说明
创建一个新数组,包含原数组中所有的非假值元素。例如false, null, 0, “”, undefined, 和 NaN 都是被认为是“假值”。 - 参数
array (Array): 待处理的数组 - 返回值
(Array): 返回过滤掉假值的新数组。
function compact (array) {
return array.filter(item => {
if (item) {
return item
}
})
}
concat
- 说明
创建一个新数组,将array与任何数组 或 值连接在一起。 - 参数
array (Array): 被连接的数组。
[values] (…*): 连接的值。 - 返回值
(Array): 返回连接后的新数组。
// ES6 实现
function concat (array, ...params) {
return [...array, ...params]
}
// ES5实现
function concat (array) {
const arr = Array.prototype.slice.call(arguments)
const res = arr.slice(1, arr.length)
return array.concat(res)
}
difference
- 说明
创建一个具有唯一array值的数组,每个值不包含在其他给定的数组中。(注:即创建一个新数组,这个数组中的值,为第一个数字(array 参数)排除了给定数组中的值。)该方法使用 SameValueZero做相等比较。结果值的顺序是由第一个数组中的顺序确定。 - 参数
array (Array): 要检查的数组。
[values] (…Array): 排除的值。 - 返回值
(Array): 返回一个过滤值后的新数组。
function difference (array, ...params) {
const target = [...params.flat()]
const _arr = []
;[...new Set(array)].filter(item => {
if (!target.find(f => f === item)) {
_arr.push(item)
}
})
return _arr
}
const res = difference([10, 10, 1, 2, 3, 4, 20, 30], [1, 2, 3, 4], [5, 6, 7, 8])
console.log(res) // [10, 20, 30]
drop(array, [n=1])
- 说明
创建一个切片数组,去除array前面的n个元素。(n默认值为1。) - 参数
array (Array): 要查询的数组。
[n=1] (number): 要去除的元素个数。 - 返回值
(Array): 返回array剩余切片。
// ts
function drop (array: Array<any>, number?: number): Array<any> {
if (!number) { number = 1 }
return array.slice(number, array.length)
}
// js
function drop(array, number) {
if (!number) {
number = 1;
}
return array.slice(number, array.length);
}
var array = [1, 2, 3, 4, 5];
var res = drop(array, 2);
console.log('原数组:' + array); // 原数组:1,2,3,4,5
console.log(res); // [ 3, 4, 5 ]
dropRight(array, [n=1])
- 说明
创建一个切片数组,去除array尾部的n个元素。(n默认值为1。) - 参数
array (Array): 要查询的数组。
[n=1] (number): 要去除的元素个数。 - 返回值
(Array): 返回array剩余切片。
// ts
function dropRight (array: Array<any>, number?: number): Array<any> {
if (!number) { number = 1 }
const _arr = array.slice()
return _arr.reverse().slice(number, array.length).reverse()
}
// js
function dropRight(array, number) {
if (!number) {
number = 1;
}
var _arr = array.slice();
return _arr.reverse().slice(number, array.length).reverse();
}
var array = [1, 2, 3, 4, 5];
var res = _loadsh().dropRight(array, 2);
console.log(array); // [ 1, 2, 3, 4, 5 ]
console.log(res); // [ 1, 2, 3 ]
fill(array, value, [start=0], [end=array.length])
- 说明
使用 value 值来填充(替换) array,从start位置开始, 到end位置结束(但不包含end位置)。
Note: 这个方法会改变 array(注:不是创建新数组)。 - 参数
array (Array): 要填充改变的数组。
value (*): 填充给 array 的值。
[start=0] (number): 开始位置(默认0)。
[end=array.length] (number):结束位置(默认array.length)。 - 返回值
(Array): 返回 array。
// ts
function fill (array: Array<any>, value: any, start?: number, end?: number) {
let i = start || 0
let len = end || array.length
for (; i < len; i++) {
array[i] = value
}
return array
}
// js
function fill(array, value, start, end) {
var i = start || 0;
var len = end || array.length;
for (; i < len; i++) {
array[i] = value;
}
return array;
}
const array = [
{ 'user': 'barney', 'active': true },
{ 'user': 'fred', 'active': false },
{ 'user': 'pebbles', 'active': false }
]
const res = _loadsh().fill(array, '*', 1)
console.log(array) // [ { user: 'barney', active: true }, '*', '*' ]
console.log(res) // [ { user: 'barney', active: true }, '*', '*' ]