一撒强、數(shù)組去重
常規(guī)數(shù)組去重一般為雙重遍歷和使用indexOf方法
1.使用雙層for循環(huán)去重
const unique = (arr) => {
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] === arr[j]) {
arr.splice(j, 1);
j--;
}
}
}
return arr;
};
2.使用indexOf方法去重
const unique = (arr) => {
if (!Array.isArray(arr)) return;
let newArray = [];
for (let i = 0; i < arr.length; i++) {
if (newArray.indexOf(arr[i]) === -1) {
newArray.push(arr[i]);
}
}
return newArray;
};
3.使用Array.from 和 set
const unique = (arr) => {
if (!Array.isArray(arr)) return;
return Array.from(new Set(arr));
};
4.數(shù)組轉(zhuǎn)對象
// 利用for in 循環(huán)
const obj = {};
const arr = ['a', 'b', 'c'];
for (let key in arr) {
obj[key] = arr[key];
}
console.log(obj); // { 0: 'a', 1: 'b', 2: 'c' }
// 使用擴展運算符
const arr = ['a', 'b', 'c'];
const obj = {...arr};
console.log(obj); // { 0: 'a', 1: 'b', 2: 'c' }
5.性能追蹤
// 測試一段js代碼的執(zhí)行耗時辆琅,可以使用performance
const start = performance.now();
let sum = 0;
for (let i = 0; i < 1000000; i++) {
sum += 1;
}
const end = performance.now();
console.log(start);
console.log(end);
6.數(shù)組扁平化
// for循環(huán) 遞歸方式
const arr = [1, [2, [3, 4]]];
const flatten = arr => {
let result = [];
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
result = result.concat(flatten(arr[i]));
} else {
result.push(arr[i]);
}
}
return result;
};
console.log(flatten(arr)); // [1, 2, 3, 4]
// reduce 方法
const arr = [1, [2, [3, 4]]];
const flatten = arr => {
return arr.reduce((prev, next) => {
return prev.concat(Array.isArray(next) ? flatten(next) : next);
}, []);
};
console.log(flatten(arr)); // [1, 2, 3, 4]
7.獲取數(shù)組的最后一項
const arr = [1, 2, 3];
// 通過數(shù)組length屬性
const last = arr[arr.length - 1];
// 通過slice方法
const last2 = arr.slice(-1)[0];
// 通過at方法
const last3 = arr.at(-1);
console.log(last); // 3
8.拷貝數(shù)組
const arr = [1, 2, 3];
// slice方法拷貝
const arr2 = arr.slice();
// 展開操作符拷貝
const arr3 = [...arr];
// Array構(gòu)造函數(shù)拷貝
const arr4 = new Array(...arr);
// 數(shù)組concat方法
const arr5 = arr.concat();
console.log(arr2); // [1, 2, 3]
9.避免多條件并列
// 多條件判斷-不友好
if (status === '1' || status === '2' || status === '3') {}
// 使用switch case語句優(yōu)化
switch (status){
case '1':
case '2':
case '3':
// todo
break;
}
// 使用includes優(yōu)化
const enum = ['1', '2', '3'];
if (enum.includes(status) {}