手写实现数组方法之分块、差集、删除数组某些元素和获取数组某些元素

一、数组分块
  1. 数组分块,将数组拆分成多个 size 长度的区块,每个区块组成小数组,整体成一个二维数组。
  2. 数组分块的实现,代码如下所示:

export function chunk (arr, size=1) {
  // 判断
  if (arr.length === 0) {
    return [];
  }
  // 声明两个变量
  let result = [];
  let tmp = [];
  // 遍历
  arr.forEach(item => {
    // 判断 tmp 元素长度是否为 0 
    if (tmp.length === 0) {
      // 将 tmp 压入到 result 中
      result.push(tmp);
    }
    // 将元素压入到临时数组 tmp 中
    tmp.push(item);
    // 判断
    if (tmp.length === size) {
      tmp = [];
    }
  });
  return result;
}

  1. 手写函数数组分块的应用,代码如下所示:
console.log(chunk([1,2,3,4,5,6,7]));

二、数组差集
  1. 数组差集,得到当前数组中所有不在 arr 中的元素组成的数组,不改变原数组。
  2. 数组差集的实现,代码如下所示:

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;
}

  1. 手写函数数组差集的应用,代码如下所示:
console.log(difference([1,3,5,7], [5, 8]));
console.log(difference([1,3,5,7]));
三、删除数组某些元素
  1. 删除数组某些元素,有两种方法,如下所示:
  • pull(array, ...values),删除原数组中与value相同的元素,返回所有删除元素的数组
  • pullAll(array,values),功能与all一致,只是参数变为数组
  1. 删除数组某些元素的实现,代码如下所示:

function pull (arr, ...args) {
  // 声明空数组,保存删掉的元素
  const result = [];
  // 遍历 arr
  for(let i=0;i<arr.length;i++) {
    // 判断当前元素是否存在于 args 数组中
    if (args.includes(arr[i])) {
      // 将当前元素的值存入到 result 中
      result.push(arr[i]);
      // 删除当前的元素
      arr.splice(i, 1);
      // 下标自减
      i--;
    }
  }
  // 返回
  return result;
}

function pullAll (arr, values) {
  return pull(arr, ...values);
}

  1. 手写函数删除数组某些元素的应用,代码如下所示:
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);
四、获取数组某些元素
  1. 获取数组某些元素,有两种方法,如下所示:
  • drop(array,count),得到当前数组过滤左边count个后剩余元素组成的数组
  • dropRight(array, count),得到当前数组过滤右边count个后剩余元素组成的数组
  1. 获取数组某些元素的实现,代码如下所示:

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);  
}


  1. 手写函数获取数组某些元素的应用,代码如下所示:
console.log(drop([1,3,5,7,9,11], 2));
console.log(dropRight([1,3,5,7,9,11], 2));
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值