数组
数组去重
- 方法1
- 方法2
- 方法3
// 笨方法
const arr = [1, 1, 2, 5, 2, 6, 8];
let newArr = [];
for (let i = 0; i < arr.length; i++) {
if (newArr.includes(arr[i])) {
continue;
}
newArr.push(arr[i]);
}
const arr = [1, 3, 45, 6, 3, 2, 0];
const newArr = arr.filter((item, index) => {
return arr.indexOf(item) === index;
});
console.log(arr); // [1, 3, 45, 6, 3, 2, 0]
console.log(newArr); // [1, 3, 45, 6, 2, 0]
const arr = [1, 3, 45, 6, 3, 2, 0];
const newArr = [...new Set(arr)];
console.log(arr); // [1, 3, 45, 6, 3, 2, 0]
console.log(newArr); // [1, 3, 45, 6, 2, 0]
数组填充
new Array(10).fill(1);
Array.from({ length: 10 }, item => 1);
数组扁平化
- 方法1
- 方法2
- 方法3
- 方法4
// Array.prototype.flat([depth])
let arr = [1, 2, 7, [2, [2, 3], 6]];
console.log(arr.flat(Infinity));
// 使用for of 递归
let arr = [1, 2, 7, [2, [2, 3], 6]];
function flat(arr) {
let newArr = [];
for (const item of arr) {
if (Array.isArray(item)) {
newArr = newArr.concat(flat(item));
} else {
newArr.push(item);
}
}
return newArr;
}
console.log(flat(arr));
// 扩展运算符
const arr = [1, 2, 7, [2, [2, 3], 6]];
function flat(arr) {
while (arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr);
}
return arr;
}
console.log(flat(arr));
// 骚操作
const arr = [1, 2, 7, [2, [2, 3], 6]];
function flat(arr) {
const result = arr
.toString()
.split(',')
.map(item => {
return +item;
});
return result;
}
console.log(flat(arr));
求数组最大值
const arr = [1, 2, 1, 4, 2, 10];
console.log(Math.max.apply(null, arr));
const arr = [1, 2, 1, 4, 2, 10];
console.log(arr.sort((a, b) => a - b)[arr.length - 1]);
const arr = [1, 2, 1, 4, 2, 10];
console.log(Math.max(...arr));
字符数组排序
const arr1 = ['A1', 'A2', 'B1', 'B2'];
const arr2 = ['A', 'B'];
const c = [...arr1, ...arr2].sort(
(a, b) =>
a.charCodeAt(0) - b.charCodeAt(0) || a.length - b.length || a.charCodeAt(1) - b.charCodeAt(1)
);
// ['A', 'A1', 'A2', 'B', 'B1', 'B2']
对象数组排序
const users = [
{
name: 'Alan',
age: 19
},
{
name: 'Bob',
age: 25
}
];
const userList = users.sort((a, b) => b.age - a.age);
// 根据年龄进行排序,注意:sort会改变原来的数组
map 相关
const a = ['1', '2', '3'].map(parseInt);
// 数组a中的'1'转化为10进制。
console.log(a); // [1, NaN, NaN]
// map的三个参数(item,index,array)
/* parseInt(string, radix)
当radix等于0或者undefined或者没有指定时,如果string以'0x'或者''0X'开头,则radix=16
以'0'开头,根据实际情况radix=10/8。 */
// 拆解过程
parseInt('1', 0);
parseInt('2', 1);
parseInt('3', 2);