loadsh 方法实现Array篇

下面的方法就是基本实现,没有进行健壮性判断,请大家见谅

chunk

  1. 说明
    将数组(array)拆分成多个 size 长度的区块,并将这些区块组成一个新数组。 如果array 无法被分割成全部等长的区块,那么最后剩余的元素将组成一个区块。
  2. 参数
    array (Array): 需要处理的数组
    [size=1] (number): 每个数组区块的长度
  3. 返回
    (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

  1. 说明
    创建一个新数组,包含原数组中所有的非假值元素。例如false, null, 0, “”, undefined, 和 NaN 都是被认为是“假值”。
  2. 参数
    array (Array): 待处理的数组
  3. 返回值
    (Array): 返回过滤掉假值的新数组。
  function compact (array) {
    return array.filter(item => {
      if (item) {
        return item
      }
    })
  }

concat

  1. 说明
    创建一个新数组,将array与任何数组 或 值连接在一起。
  2. 参数
    array (Array): 被连接的数组。
    [values] (…*): 连接的值。
  3. 返回值
    (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

  1. 说明
    创建一个具有唯一array值的数组,每个值不包含在其他给定的数组中。(注:即创建一个新数组,这个数组中的值,为第一个数字(array 参数)排除了给定数组中的值。)该方法使用 SameValueZero做相等比较。结果值的顺序是由第一个数组中的顺序确定。
  2. 参数
    array (Array): 要检查的数组。
    [values] (…Array): 排除的值。
  3. 返回值
    (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])

  1. 说明
    创建一个切片数组,去除array前面的n个元素。(n默认值为1。)
  2. 参数
    array (Array): 要查询的数组。
    [n=1] (number): 要去除的元素个数。
  3. 返回值
    (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])

  1. 说明
    创建一个切片数组,去除array尾部的n个元素。(n默认值为1。)
  2. 参数
    array (Array): 要查询的数组。
    [n=1] (number): 要去除的元素个数。
  3. 返回值
    (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])

  1. 说明
    使用 value 值来填充(替换) array,从start位置开始, 到end位置结束(但不包含end位置)。
    Note: 这个方法会改变 array(注:不是创建新数组)。
  2. 参数
    array (Array): 要填充改变的数组。
    value (*): 填充给 array 的值。
    [start=0] (number): 开始位置(默认0)。
    [end=array.length] (number):结束位置(默认array.length)。
  3. 返回值
    (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 }, '*', '*' ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值