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