上一篇
场景引入:
刚接手一个需求,后端小哥甩过来一段Ajax返回的Map
类型数据,你盯着控制台里那坨{key: value, ...}
的结构陷入沉思——这玩意儿怎么用for循环
优雅处理?🤔 别慌!今天带你用三种姿势拆解它,附赠ES6
骚操作!
假设接口返回如下结构(以用户权限数据为例):
{ "admin": ["delete", "edit"], "user": ["view", "comment"], "guest": ["view"] }
for...in
循环// 假设data是Ajax返回的Map for (let key in data) { if (data.hasOwnProperty(key)) { // 避免原型链污染 console.log(`角色【${key}】拥有权限:${data[key].join('、')}`); // 输出示例:角色【admin】拥有权限:delete、edit } }
⚠️ 注意:一定要加hasOwnProperty
检查!防止遍历到继承属性。
Object.entries()
+ 解构Object.entries(data).forEach(([role, permissions]) => { console.log(`✨ ${role} → ${permissions.length}种权限`); });
Object.keys()
+ map()
Object.keys(data).map(key => { return `角色${key}的权限数:${data[key].length}`; }).forEach(console.log); // 链式调用更丝滑~
for...of
+ 迭代器for (const [key, value] of Object.entries(data)) { alert(`${key}:${value}`); // 适合需要中断的场景 }
// 假设返回的Map值也是Map const deepData = { "2025": { "Q1": ["Jan", "Feb", "Mar"], "Q2": ["Apr", "May", "Jun"] } }; // 递归遍历 function traverseMap(map) { for (const [key, value] of Object.entries(map)) { if (Array.isArray(value)) { console.log(`${key}月份:`, value); } else { traverseMap(value); // 递归调用 } } }
Object.entries(data) .filter(([key]) => !key.includes('test')) // 过滤含test的key .forEach(([k, v]) => { /*...*/ });
for...of
(可提前break
) Object.entries()
Object.keys()
更高效 :下次遇到Ajax返回Map数据,掏出这张表直接开干!🎯
场景 | 推荐写法 | 特点 |
---|---|---|
简单遍历 | for...in + 安全检查 |
兼容性好 |
需要key/value对 | Object.entries() |
可解构,代码简洁 |
大数据量+可能中断 | for...of |
可break,性能优 |
(注:本文代码测试环境Chrome 118+,数据参考2025-08前端社区实践)
本文由 籍代秋 于2025-08-01发表在【云服务器提供商】,文中图片由(籍代秋)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/499832.html
发表评论