新手高频使用JS却易踩坑的核心场景,5 个“救命技巧”,直接拯救!

36 阅读3分钟

1. 数组去重:别再手动遍历了! [...new Set(arr)]  一行搞定

新手坑:写嵌套循环遍历去重,代码冗余还低效,比如:

// 新手错误示范
const arr = [1, 2, 2, 3, 3, 3];
let uniqueArr = [];
for (let i = 0; i < arr.length; i++) {
  let isRepeat = false;
  for (let j = 0; j < uniqueArr.length; j++) {
    if (arr[i] === uniqueArr[j]) isRepeat = true;
  }
  if (!isRepeat) uniqueArr.push(arr[i]);
}

实用技巧:利用  Set  自动去重特性,配合解构赋值转数组,一行搞定:

const arr = [1, 2, 2, 3, 3, 3, "a", "a"];
const uniqueArr = [...new Set(arr)]; // 核心代码

console.log(uniqueArr); // 输出:[1, 2, 3, "a"]

 

实战场景:用户标签去重、订单编号去重、筛选唯一数据。

小提醒: Set  对基本类型(数字、字符串)去重完美,对对象去重无效(需额外处理)。

2. 数组判空:别写  arr.length === 0  了! !arr.length  更简洁

新手坑:判空时写冗长逻辑,甚至漏判  null。

实用技巧:利用“空数组  length  为 0,0 是 falsy 值”的特性,简洁判空:

const arr = [];
// 安全判空(先判null/undefined,再判是否为空)
if (arr && !arr.length) {
  console.log("数组为空");
}

// 进阶:封装成工具函数(复用率拉满)
const isEmptyArr = (arr) => !arr || arr.length === 0;
console.log(isEmptyArr([])); // true
console.log(isEmptyArr([1])); // false
console.log(isEmptyArr(null)); // true(避免空指针)

 

实战场景:接口返回数据判断、用户输入列表判空、循环前避免空数组报错。

3. 数组拼接:别用  concat()  了! [...a, ...b]  更灵活

新手坑:用  concat()  拼接数组,无法在中间插入元素,只能首尾拼接:

// 新手局限写法
const a = [1, 2];
const b = [3, 4];
const c = a.concat(b); // 只能 [1,2,3,4]

 

实用技巧:解构赋值拼接,支持任意位置插入元素,灵活度拉满:

const a = [1, 2];
const b = [3, 4];
const c = [0, ...a, 2.5, ...b, 5]; // 中间插入元素

console.log(c); // 输出:[0, 1, 2, 2.5, 3, 4, 5]

// 批量添加元素(替代push.apply)
const arr = [1, 2];
const newItems = [3, 4, 5];
arr.push(...newItems); // 等价于 arr.push(3,4,5)
console.log(arr); // 输出:[1,2,3,4,5]

 

实战场景:合并多个接口返回的列表、动态添加列表数据、拼接带分隔符的数组。

4. 数组查找:别用  for  循环了! find()  直接找元素

新手坑:遍历数组查找元素,代码冗余,找到后还要手动 break:

实用技巧:用  find()  方法,找到符合条件的第一个元素,直接返回:

const users = [
  { id: 1, name: "张三" },
  { id: 2, name: "李四" }
];
// 核心代码:找到id=2的用户
const targetUser = users.find(user => user.id === 2);

console.log(targetUser); // 输出:{id: 2, name: "李四"}

 

实战场景:根据 ID 查找用户、根据编号查找订单、筛选单个目标数据。

小提醒:没找到元素时返回  undefined ,可配合默认值  || {}  避免报错。

5. 数组删除:别用  splice()  了! filter()  更安全

新手坑:用  splice()  删除元素,会直接修改原数组,导致后续代码 bug。

实用技巧:用  filter()  过滤元素,返回新数组,不修改原数组,更安全:

  
const arr = [1, 2, 3, 4];
// 核心代码:删除值为2的元素(返回新数组)
const newArr = arr.filter(item => item !== 2);

console.log(arr); // 原数组不变:[1,2,3,4]
console.log(newArr); // 新数组:[1,3,4]

// 按条件删除(比如删除id=2的用户)
const users = [{id:1}, {id:2}, {id:3}];
const newUsers = users.filter(user => user.id !== 2);

  实战场景:删除列表中的指定项、筛选不需要的数据、避免修改原数据导致的副作用。

小提醒: filter()  会遍历所有元素,若数组极大,需权衡性能(但新手场景完全够用)。

避坑总结:

  • 数组去重 嵌套循环  [...new Set(arr)]  一行搞定,高效简洁

  • 数组判空  arr.length === 0   arr && !arr.length  代码精简,避免空指针

  • 数组拼接  concat()   [...a, ...b]  灵活插入,支持批量添加

  • 数组查找  for  循环+break  find()  直接返回元素,无需手动中断

  • 数组删除  splice()   filter()  不修改原数组,更安全

如果觉得有用,点赞收藏+关注,后续分享更多 JS 实用技巧~