数组方法总结

1:数组去重 

// 方法1  es6 set 方法 
function noRepeat(arr) {
  return [...new Set(arr)]
}

//方法2   
//   IE8以下不支持数组的indexOf方法  
function uniq(array){
  var temp = []; //一个新的临时数组
  for(var i = 0; i < array.length; i++){
    if(temp.indexOf(array[i]) == -1){
      temp.push(array[i]);
    }
  }
  return temp;
}
var newArray = [1,2,2,4,9,6,7,5,2,3,5,6,5];
console.log(uniq(newArray));// [1, 2, 4, 9, 6, 7, 5, 3]

//方法3:  双for循环  
function reRepeat(arr){
    for(var i =0;i < arr.length;i++){
      for(var j = i+1;j<arr.length;j++){
         if(arr[j] == arr[i]){
             arr.splice(j,1)
               j--          //删除后下标减一,防止错过相同元素
            }
          }
        }
       return arr
  }
   
console.log(reRepeat(newArray))

2:查找数组内最大值和最小值

function arrayMax(arr) {
  return Math.max(...arr);
}

function arrayMin(arr) {
  return Math.min(...arr);
}

3:返回已size为长度的数组分割的原数组

function chunk(arr, size) {
  return Array.from({
    length: Math.ceil(arr.length / size)
  }, (v, i) => arr.slice(i * size, i * size + size));
}
var arr = [1,2,3,4,5,6]
console.log(chunk(arr,2))   // [[1,2],[3,4],[5,6]]

4: 数组中某元素出现的次数

function countOccurrences(arr, value) {
  return arr.reduce((a, v) => v === value ? a + 1 : a + 0, 0);
}
console.log(countOccurrences(arr,1))    // 2

5:扁平化数组  (展开多维数组  形成一维数组    -1  代表全部展开   其余值代表展开几维)

var arr3 =  [[1,2],[3,4,[33,44]],[5,6],7,8]
function flatten(arr, depth ) {
  if (depth === -1) {
    return [].concat(...arr.map(v => Array.isArray(v) ? this.flatten(v) : v))
  }
  if (depth === 1) {
    return arr.reduce((a, v) => a.concat(v), []);
  }
  return arr.reduce((a, v) => a.concat(Array.isArray(v) ? this.flatten(v, depth - 1) : v), [])
}
console.log(flatten(arr3,-1))     // [1, 2, 3, 4, 33, 44, 5, 6, 7, 8]
console.log(flatten(arr3,1))     // [1, 2, 3, 4, [33,44], 5, 6, 7, 8]

6:对比两个数组并且返回其中不同的元素 或者相同的值  返回一个数组 

var arrA = [1,2,3,4]
var arrB = [1,2,3,5,6,7,4]
function diffrence(arr1, arr2) {
  return arr1.concat(arr2).filter(function(v, i, arr) {
      return arr.indexOf(v) === arr.lastIndexOf(v);
  });
}
console.log(diffrence(arrA, arrB))  // [5,6,7]      

function intersection(arr1, arr2) {
  return arr2.filter(v => arr1.includes(v))
}
console.log(intersection(arrA, arrB)) //  [1,2,3,4]

7:从右删除n个元素  返回删除后的剩余数组 

function dropRight(arr, n) {
  return n < arr.length ? arr.slice(0, arr.length - n) : [];
}

console.log(dropRight(arrA,1))      //  [1,2,3]
console.log(dropRight(arrA,3))      //  [1]

8:乱排  

var arrC = [1,2,3,4,5,6,7]
function shuffle(arr) {
  let array = arr
  let index = array.length

  while (index) {
    index -= 1
    let randomInedx = Math.floor(Math.random() * index)
    let middleware = array[index]
    array[index] = array[randomInedx]
    array[randomInedx] = middleware
  }

  return array
}

console.log(shuffle(arrC))    //  [5, 3, 1, 7, 6, 4, 2]

9: slice 方法

// slice(start,end)表示从下标start开始到下标end(不包括end)进行截取,得到的是一个新数组,不改变原数组。当start为负值时表示从倒数第几个元素开始往后截取,不填end的话就表示从倒数第几个元素开始截取,一直截取到数组末尾元素。

var arrD = [1,2,7,2,6,0,3,1,5,7,8,9,45,12,34,0,56,12,2]
var sliceArr = arrD.slice(-2)
console.log(sliceArr,"sliceArr")    // [12, 2]
var sliceArr = arrD.slice(2,4)      // [7, 2]
console.log(sliceArr,"sliceArr")

10:splice 方法   会改变原数组 

// splice()方法有三个参数,分别表示从哪个下标开始,删几个,新元素。可以实现增加,删除,替换数组元素的功能。arr.splice(-5,5)表示从倒数第五个元素开始,删五个元素。巧妙的是该方法的返回值是删除的元素集合。同时该方法改变了原数组。原数组变成了除了删除的元素剩下的元素集合。

var sliceArr1 = arrD.splice(-3,3)
console.log(sliceArr1,"sliceArr1")    // [56, 12, 2]
console.log(arrD)     // [1, 2, 7, 2, 6, 0, 3, 1, 5, 7, 8, 9, 45, 12, 34, 0]

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值