js 数组去重;排序数组;取大小值;对象数组排序

ES6 Set去重

let arr = [1,1,1,2,3,5];
let newarr = new Set(arr); // 接收一个数组  传参的值有重复,他会返回一个没有重复值的set结构值

indexOf去重

实现思路:如果当前数组的第i项在当前数组中第一次出现的位置不是i,
那么表示第i项是重复的,忽略掉。否则存入结果数组

function uniq(array){
    var temp = [];
    for(var i = 0; i < array.length; i++) {
         if(array.indexOf(array[i]) == i){
            temp.push(array[i])
        }
        // 或者获取新数组indexOf是否等于-1
        if (temp.indexOf(array[i]) == -1) {
        	temp.push(array[i])
        }
    }
    return temp;
}

var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5];
console.log(uniq(aa));

利用对象Key不可重复去重

function uniq (array) {
    let obj = {}
    let newarr = []
    let type = ''
    array.forEach(item => {
        // 判断类型 以防1 '1' 会去重
        type = typeof item
        if (!obj[item]) {
            obj[item] = [type]
            newarr.push(item)
        } else if (obj[item].indexOf(type) == -1) {
            obj[item].push(type)
            newarr.push(item)
        }
    })
    console.log(obj);
    return newarr
}
console.log(uniq([1,2,"2",4,9,"a","a",2,3,5,6,5]));

去除数组对象

let arr = [{
key: '01',
value: '乐乐'
}, {
key: '02',
value: '博博'
}, {
key: '03',
value: '淘淘'
},{
key: '04',
value: '哈哈'
},{
key: '01',
value: '乐乐'
},{
key: '1',
value: '按个'
},{
key: 1,
value: '八个'
}];
let obj = {}
let newarr = []
let type = ''
arr.forEach(item => {
    type = typeof item.key
    if (!obj[item.key]) {
        obj[item.key] = [type]
        newarr.push(item)
    } else if (obj[item.key].indexOf(type) == -1) {
        obj[item.key].push(type)
        newarr.push(item)
    }
})
console.log(obj);
console.log(newarr);

1.sort排序

sort是es6新增的方法 排序会直接改变的是原数组

const arr = [1,51,25,41,5]

arr.sort((a, b) => {
	// b-a从大到小 a-b从小到大
    return b - a
})

sort函数也可以排序对象数组

const arrobj = [
	{
		id: 1,
		name: 'haha'
	},
	{
		id: 20,
		name: 'sasa'
	},
	{
		id: 15,
		name: 'fafa'
	}
]
arrobj.sort((a, b) => {
	return a - b 
})
arrobj // [{id: 1, name: 'haha'}, {id: 15, name: 'fafa'}, {id: 20, name: 'sasa'}]

// 比较字符串
arrobj.sort(function(a, b){
	  var x = a.name.toLowerCase();
	  var y = b.name.toLowerCase();
	  if (x < y) {return -1;}
	  if (x > y) {return 1;}
	  return 0;
});

2.假设法取大小值

假设当前数组中的第一个值是最大值,然后拿这个最大值和后面的项逐一比较,如果后面的某一个值比假设的值还大,说明假设错了,我们把假设的值进行替换。最后得到的结果就是我们想要的。

// 获取最大值:

let arr = [22,13,6,55,30];
let max = arr[0];

for(let i = 1; i < arr.length; i++) {
   let cur = arr[i];
   cur > max ? max = cur : null
}

console.log(max); // 55

// 获取最小值:

let arr = [22,13,6,55,30];
let min = arr[0];

for(let i = 1; i < arr.length; i++) {
  let cur = arr[i];
  cur < min ? min = cur : null
}
console.log(min)  // 6

3.使用 Math 中的 max/min 方法取大小值

可以使用apply来实现。apply传入的是一个数组。

var arr = [22,13,6,55,30];

var max = Math.max.apply(null, arr);
var min = Math.min.apply(null, arr);

console.log(max, min) // 55,6

4.使用ES6的扩展运算符取数组最大小值

 //ES5 取数组最大值
console.log(Math.max.apply(this, [654, 233, 727]))//ES6 扩展运算符
console.log(Math.max(...[654, 233, 727]))
//相当于
console.log(Math.max(654, 233, 727))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值