Skip to content

一、数组

快速开始

数组去重

javascript
const arr = [1, 2, 2, 3, 4, 4, 5];

const uniqueArr = [...new Set(arr)];

console.log(uniqueArr); // [1, 2, 3, 4, 5]

数组扁平化

将多维数组转换为一维数组。现代浏览器支持 flat(Infinity),如果需要兼容旧环境,可以使用 reduce 递归。

javascript
const deepArr = [1, [2, [3, [4, 5]]], 6];

// 现代语法
const flat1 = deepArr.flat(Infinity);

// 兼容写法
const flat2 = deepArr.reduce((acc, val) => 
  acc.concat(Array.isArray(val) ? flat2(val) : val), []
);

console.log(flat1); // [1, 2, 3, 4, 5, 6]

数组乱序

经典的 Fisher-Yates 洗牌算法,或者利用 sort 的随机比较

javascript
const arr = [1, 2, 3, 4, 5];

// 方法:利用 sort 的随机比较函数
const shuffled = [...arr].sort(() => Math.random() - 0.5);

console.log(shuffled); // 例如:[3, 1, 5, 2, 4]

数组排序

注意:默认的 sort() 是按字符编码排序的,数字排序必须传入比较函数。

javascript
const numbers = [10, 5, 40, 25];

// 升序
numbers.sort((a, b) => a - b); 

// 降序
numbers.sort((a, b) => b - a);

console.log(numbers); // [5, 10, 25, 40]

寻找数组交集与差集

利用 filterincludes 快速处理两个数组的关系。

javascript
const arr1 = [1, 2, 3, 4];
const arr2 = [3, 4, 5, 6];

// 交集 (在 arr1 中 且 在 arr2 中)
const intersection = arr1.filter(item => arr2.includes(item));

// 差集 (在 arr1 中 但 不在 arr2 中)
const difference = arr1.filter(item => !arr2.includes(item));

console.log(intersection); // [3, 4]
console.log(difference);   // [1, 2]

数组转对象

将数组根据某个属性转换为对象,常用于通过 ID 快速查找数据。

javascript
const users = [
  { id: 1, name: 'Alice' },
  { id: 2, name: 'Bob' }
];

// 方法:reduce
const userMap = users.reduce((acc, curr) => {
  acc[curr.id] = curr;
  return acc;
}, {});

console.log(userMap);
// { 1: { id: 1, name: 'Alice' }, 2: { id: 2, name: 'Bob' } }

数组合并与去重

javascript
const arr1 = [1, 2, 3];
const arr2 = [3, 4, 5];

// 合并并去重
const merged = [...new Set([...arr1, ...arr2])];

console.log(merged); // [1, 2, 3, 4, 5]

数组求和

javascript
const nums = [1, 2, 3, 4, 5];

// 方法:reduce
const sum = nums.reduce((acc, curr) => acc + curr, 0);

console.log(sum); // 15

移除数组中的假值

快速清理数组中的 false, null, 0, "", undefined, NaN

javascript
const dirtyArr = [0, 1, false, 2, '', 3, null, undefined];

// 方法:filter(Boolean)
const cleanArr = dirtyArr.filter(Boolean);

console.log(cleanArr); // [1, 2, 3]