JS数组高级操作(上)

转载自 JS面试之数组的几个不low操作(3) ,点击查看原文

1. 数组扁平化

  • 高级操作

    var arr1 = [1,2,3,[4,5,[6,7,8]]]
    var arr_1 = arr1.flat(Infinity)
    
  • 常规操作:利用递归和数组合并方法 concat实现扁平。

    function flatten(arr) {
      while(arr.some(item=>Array.isArray(item))) {
        arr = [].concat(...arr);
      }
      return arr;
    }
    

2. 去重

  • 高级操作(两种方法)

    var arr1 = [1,2,3,3]
    arr_1 = [...new Set(arr1)]
    
    var arr1 = [1,2,3,3]
    arr_1 = Array.from(
      new Set(arr1)
    )
    

    Array.from() 可以将类数组转换为数组,类数组包括但又不限于 Set/ Map,还有包括可遍历的对象。

    Set 是ES6提供的新的数据结构,Set对象不是数组, 可以用来保存对象或者基本类型, 所有保存的值都是唯一的。这也就是我们要使用这一特性,实现去重。

  • 常规操作

    function distinct(arr) {
      let resule = [], i, j;
      for (i = 0; i < arr.length; i++) {
        for (j = i+1; j < arr.length; j++) {
          if(arr[i] === arr[j]){
            j = ++i
          }
        }
        resule.push(arr[i])
      }
    
      return resule
    }
    

3. 排序

  • 高级操作

    var arr1 = [1,2,4,3,8,5]
    arr1.sort()  //升序
    
    var arr1 = [1,2,4,3,8,5]
    arr1.sort((a, b) => b - a) //降序
    

对象数组排序

var arr = [
	{ name: 'Edward', value: 21 },
	{ name: 'Sharpe', value: 37 },
	{ name: 'And', value: 45 },
	{ name: 'The', value: -12 },
	{ name: 'Magnetic' },
	{ name: 'Zeros', value: 37 }
]
arr.sort((a, b) => {
	let nameA = a.name.toLowerCase()
	let nameB = b.name.toLowerCase()
	
	// 升序
	if(nameA < nameB) {
		return -1
	}
	if(nameA > nameB) {
		return 1
	}
	return 0
	
	// 降序
	// if(nameA < nameB) {
	//   return 1
	// }
	// if(nameA > nameB) {
	//   return -1
	// }
	// return 0
})
  • 常规操作

    选择排序:

    function sortFun(arr) { // 选择排序
      let i, j;
      for (i = 0; i < arr.length; i++) {
        for (j = i+1; j < arr.length; j++) {
          if(arr[i] < arr[j]){
            [arr[i], arr[j]] = [arr[j], arr[i]]
          }
        } 
      }
      return arr
    }
    

    冒泡排序:

    function bubleSort(arr) { //冒泡排序
      let i, j;
      for (i = arr.length-1; i > 2; i--) {
        for (j = 0; j < i; j++) {
          if(arr[i] > arr[j]){
            [arr[i], arr[j]] = [arr[j], arr[i]]
          }
        }
      }
      return arr
    }
    

4. 最大值、最小值

  • 高级操作

    var arr1 = [1,2,4,3,8,5]
    Math.max(...arr1)
    Math.min(...arr1)
    

    Math.max() 方法可返回两个指定的数中带有较大的值的那个数

    var arr1 = [1,2,4,3,8,5]
    arr1.reduce((prev, cur, curIndex, arr) => {
      return Math.max(prev,cur);
      //return Math.min(prev,cur);
    })
    
  • 常规操作: 先排序,再取最大/最小值。

5. 求和

  • 高级操作

    arr1.reduce((prev, cur, curIndex, arr) => {
      return prev + cur
    })
    
  • 常规操作

    function sumFun(arr){
      let sum = 0, i;
      for (i = 0; i < arr.length; i++) {
        sum += arr[i]
      }
      return sum
    }
    

转载自 JS面试之数组的几个不low操作(3) ,点击查看原文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值