数组元素去重、按大小排序、反序排序,使用内置方法sort()/reverse()和非内置(自定义)方法
- 数组元素去重
// 1、map去重
let arr = [1, 2, 3, 4, 5, 3, 4, 6, 7, 86, 5, 4, 22, 1];
const result = [];
const map = new Map();
for (let i of arr) {
if (!map.has(i)) {
map.set(i, true);
result.push(i);
}
}
console.log(result);
// 2、new Set()去重,Set类似数组,其所有成员唯一,Array.from将一个类数组或可遍历对象转换成一个真正的数组
let result2 = new Set(arr);
let a = Array.from(result2);
console.log(a);
// 3、Array includes去重
let result3 = [];
for (i of arr) {
if (!result3.includes(i)) {
result3.push(i);
}
}
console.log(result3);
//4、splice(开始下标,删除的元素数,添加的新元素)方法用于添加或删除数组中的元素
for (var i = 0; i < arr.length; i++) {
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] === arr[j]) {
arr.splice(j, 1);
j--;
}
}
}
console.log(arr);
//使用判断下标的方法indexOf(arr)==-1
- 升序排序
//内置方法sort()
var arr3 = [23, 34, 22, 3, 56, 8, 9, 32];
arr3.sort(function (a, b) {
return a - b;
});
console.log(arr3);//[ 3, 8, 9, 22,23, 32, 34, 56]
多条件排序(当某一值相等时按另一个字段排序)
//按AValue从大到小排序,当AValue值相等时,按BValue从大到小排序
if (b.AValue== a.AValue) {
return b.BValue- a.BValue
} else return b.AValue- a.AValue;
非内置方法(冒泡排序)
//非内置方法
var arr3 = [23, 34, 22, 3, 56, 8, 9, 32];
var temp = 0;
for (var i = 0; i < arr3.length; i++) {
for (var j = i + 1; j < arr3.length; j++) {
if (arr3[i] > arr3[j]) {
// temp = arr3[j];
// arr3[j] = arr3[i];
// arr3[i] = temp;
//es6解构赋值
[arr3[i], arr3[j]] = [arr3[j], arr3[i]]
}
}
}
console.log(arr3);//[ 3, 8, 9, 22,23, 32, 34, 56]
- 降序排序
内置方法sort()
//内置方法sort()
var arr3 = [23, 34, 22, 3, 56, 8, 9, 32];
arr3.sort(function (a, b) {
return b - a;
});
console.log(arr3);//[56, 34, 32, 23,22, 9, 8, 3]
非内置方法
//非内置方法
var arr3 = [23, 34, 22, 3, 56, 8, 9, 32];
for (var i = 0; i < arr3.length; i++) {
for (var j = i + 1; j < arr3.length; j++) {
if (arr3[i] < arr3[j]) {
//es6解构赋值
[arr3[i], arr3[j]] = [arr3[j], arr3[i]]
}
}
}
console.log(arr3);////[56, 34, 32, 23,22, 9, 8, 3]
- 反序排序(将数组元素翻转)
内置方法reverse()
//内置方法reverse()
var arr1 = [12, 22, 34, 45, 66];
arr1.reverse();
console.log(arr1);
//[ 66, 45, 34, 22, 12 ]
非内置方法
var arr4 = [22, 34, 56, 78, 90, 111];
function rever(arr) {
// console.log(arr);
var right = 0;
var left = arr.length - 1;
// 循环语句,执行后返回继续判断知道不满足条件(区别于if语句,if只进行一次判断)
while (right < left) {
// 解构赋值
[arr[right], arr[left]] = [arr[left], arr[right]];
right++;
left--;
}
console.log(arr);
}
rever(arr4);//[ 111, 90, 78, 56, 34, 22 ]