
嘻道奇闻
- 文章199742
- 阅读14625734
前端开发必学:JS数组增删改查与遍历方法详解
社会2025-05-19 12:56:45
刚学前端那会儿,你是不是也遇到过这些抓狂瞬间?用户提交的表单突然要动态增减字段、购物车商品数量总计算错误、筛选条件一多页面就卡成PPT...今天咱们就用??真实开发场景??手把手拆解,保准你看完就能把数组玩得明明白白!
场景一:动态表单字段管理
??需求??:用户要动态添加/删除教育经历,每次操作后实时更新数据
??解决方法??:
- ??新增字段??用
push()
往数组末尾塞数据
javascript复制let educationList = []; // 点击"添加"按钮时 educationList.push({ school: "", degree: "" });
- ??删除指定字段??用
splice(索引,1)
精准打击
javascript复制// 删除第2条教育经历(索引从0开始算) educationList.splice(1, 1);
- ??修改数据??直接通过索引定位
javascript复制// 修改第1条数据的学校名称 educationList[0].school = "清华大学";
??避坑指南??:
- 用
map()
批量更新表单值更高效 - 深拷贝数组记得用
JSON.parse(JSON.stringify(arr))
场景二:购物车功能开发
??需求??:商品数量增减、计算总价、自动移除缺货商品
??核心操作??:
- ??增减数量??用
findIndex()
定位商品
javascript复制let cart = [ {id:1, name:"手机", price:2999, count:2}, {id:2, name:"耳机", price:199, count:1} ]; // 找到手机的位置 const index = cart.findIndex(item => item.id === 1); // 数量+1 cart[index].count += 1;
- ??移除商品??用
filter()
直接过滤
javascript复制// 清空数量为0的商品 cart = cart.filter(item => item.count > 0);
- ??计算总价??必杀技
reduce()
javascript复制const total = cart.reduce((sum, item) => sum + item.price*item.count, 0);
场景三:表格数据筛选与分页
??需求??:根据多条件筛选数据,支持分页加载
??性能优化方案??:
- ??条件筛选??用
filter()
组合拳
javascript复制const filteredData = originalData.filter(item => { return item.price > 1000 && item.category === "电子产品" && item.stock > 0; });
- ??分页截取??用
slice(起始索引, 结束索引)
javascript复制// 每页10条,取第3页数据 const pageData = filteredData.slice(20, 30);
- ??搜索联想??用
some()
+includes()
javascript复制// 检查是否有包含关键词的商品 const hasResult = products.some(item => item.name.includes(searchKeyword) );
自问自答:实际开发高频问题
??Q:什么时候用forEach?什么时候用map???
- 需要??修改原数组??用
forEach
- 要??生成新数组??用
map
- 举个栗子:
javascript复制// 单纯修改原数组(适合forEach) priceList.forEach((item, index) => { priceList[index] = item * 0.8; // 打八折 }); // 生成新数组(必须用map) const newPrices = priceList.map(item => item * 0.8);
??Q:splice和slice老是搞混怎么办???
- ??splice??是手术刀:会改变原数组,用来做切除、插入操作
- ??slice??是复印机:复制数组片段,原数组完好无损
??Q:filter和find怎么选???
- 需要??所有符合条件的结果??用
filter
(返回数组) - 只要??第一个匹配项??用
find
(返回对象)
javascript复制// 找第一个管理员账号 const admin = users.find(u => u.role === 'admin'); // 找所有VIP用户 const vips = users.filter(u => u.isVIP);
小编观点
数组操作就像搭积木,别被各种方法吓到。记住这三条铁律:
- ??增删改查??优先考虑
splice/findIndex/filter
- ??遍历处理??先想
map/filter/reduce
三件套 - 遇到复杂操作就把方法??链式调用??起来
下次产品经理再提需求,直接把这篇甩过去:"这个功能,给我数组操作三分钟搞定!"