JS - 数组操作

157 阅读1分钟

排序

升序

function bubblArrSort(arr) {
  var len = arr.length, d;
  for (var i = 0; i < len; i ++) {
    for (var j = i; j < len; j ++) {
      if (arr[i] > arr[j]) {
        d = arr[j]
        arr[j] = arr[i]
        arr[i] = d
      }
    }
  }
  return arr
}

or/或者

arr.sort()

image.png

降序

function bubblArrDescend(arr) {
  var len = arr.length, d;
  for (var i = 0; i < len; i ++) {
    for (var j = i; j < len; j ++) {
      if (arr[i] < arr[j]) {
        d = arr[j]
        arr[j] = arr[i]
        arr[i] = d
      }
    }
  }
  return arr
}

or

arr.sort().reverse()

image.png

去重

function uniqueArr(arr) {
  var newArr = []
  for (var i = 0; i < arr.length; i ++) {
    if (newArr.indexOf(arr[i]) === -1) {
      newArr.push(arr[i])
    }
  }
  return newArr
}

or

new Set(arr)

or

arr.filter(function(v,i,self){
  return self.indexOf(v) == i;
})

or

arr.reduce(function (prev, cur) {
    prev.indexOf(cur) === -1 && prev.push(cur);
    return prev;
},[])

image.png

every()和some()

every() 判断数组中每一项都是否满足条件,只有所有项都满足条件,才会返回true
some() 判断数组中是否存在满足条件的项,只要有一项满足条件,就会返回true image.png

reduce()和reduceRight()

reduce() 两个参数:函数和递归的初始值。从数组的第一项开始,逐个遍历到最后
reduceRight() 从数组的最后一项开始,向前遍历到第一项

arr.reduce(function(prev,cur,index,arr){
...
}, init);

arr 表示原数组;
prev 表示上一次调用回调时的返回值,或者初始值 init;
cur 表示当前正在处理的数组元素;
index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1init 表示初始值。

数组转对象

arr.reduce((prev, cur) => {prev[cur.id] = cur; return prev;}, {})

image.png

对象数组去重(juejin.cn/post/695416…)

reduce实现扁平化数组转换为树形数据 (转自she_willwww.cnblogs.com/shewill/p/1…