
本文讲解如何从 JSON 数组中安全提取深层嵌套属性(如 rps.cll),并拼接为逗号分隔的字符串,涵盖过滤空值、链式处理及常见错误规避。
本文讲解如何从 json 数组中安全提取深层嵌套属性(如 `rps.cll`),并拼接为逗号分隔的字符串,涵盖过滤空值、链式处理及常见错误规避。
在 JavaScript 中,将数组内多个对象的某个嵌套字段(例如 rps.cll)提取出来并用逗号连接,不能仅靠 filter() 或直接访问下标——前者若不配合 map() 无法转换结构,后者(如 dtt[0].rps.cll)只能取单个值,缺乏可扩展性。
正确做法是采用「过滤 → 映射 → 拼接」三步链式操作,确保健壮性与可读性:
function list(data) {
const dtt = JSON.parse(data);
const addresses = dtt
.filter(item => item.rps && item.rps.cll) // 过滤掉 rps 不存在或 cll 为空/undefined 的项
.map(item => item.rps.cll) // 提取每个有效项的 cll 值,生成新字符串数组
.join(','); // 用逗号连接所有值
console.log(addresses); // 输出:B90BD,2E147FA3,2E147FA3
return addresses;
}
✅ 关键说明:
-
filter()仅保留item.rps和item.rps.cll均存在的对象,避免运行时错误(如Cannot read property 'cll' of undefined); -
map()负责结构转换,将原对象数组变为纯字符串数组['B90BD', '2E147FA3', '2E147FA3']; -
join(',')是最终格式化步骤,不可被filter().join()替代——因为filter()返回的是原对象数组,而非目标字符串。
? 使用示例:
const jsonData = `[
{"cmm":"erl","pk":{"dt":"ZF"},"rps":{"cll":"B90BD"}},
{"cmm":"erl","pk":{"dt":"7E"},"rps":{"cll":"2E147FA3"}},
{"cmm":"erl","pk":{"dt":"7E"},"rps":{"cll":"2E147FA3"}}
]`;
list(jsonData); // ✅ 正确输出:B90BD,2E147FA3,2E147FA3
⚠️ 注意事项:
- 若输入非合法 JSON 字符串,
JSON.parse()会抛出异常,建议增加try...catch包裹; - 字段名需严格匹配(如原文中是
cll,而非ccl,初学者易因拼写错误导致undefined); - 现代写法可进一步简化为箭头函数 + 可选链(ES2020+):
.map(item => item.rps?.cll).filter(Boolean).join(',')但需注意浏览器兼容性及
null/undefined的隐式过滤逻辑。
掌握这一模式,即可高效处理任意层级嵌套数据的扁平化提取任务。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











