JavaScript使用forEach遍历多维数组,无法获取recommendedTo数组具体值
问题分析与解决方案
嘿,我来帮你捋捋这个问题~你遇到的遍历recommendedTo数组只显示[array]的情况,通常要么是没深入处理嵌套数组,要么是被控制台的简化显示给误导了,咱们一步步来看:
先把你给出的代码补全下(推测你可能是这样处理的):
let requestBody = { "recommendations":[ { "book" : "12", "recommendedTo" : [ { "employeeId" : "22" }, { "employeeId" : "44" } ] }, { "book": "13", "recommendedTo":[ { "employeeId": "2" }, { "employeeId": "3" } ] } ] }; let messageBody = { recommendations: [] }; // 错误示例:只处理外层数组,直接把recommendedTo数组塞进去 requestBody.recommendations.forEach(rec => { messageBody.recommendations.push({ book: rec.book, recommendedTo: rec.recommendedTo // 这里直接存了数组引用,后续输出可能显示[array] }); });
几种常见的出错场景和解决办法:
场景1:你需要提取
recommendedTo里的具体值(比如employeeId)
如果你只是想拿到员工ID,那得对recommendedTo这个嵌套数组再做一层遍历/映射,而不是直接把整个数组丢进去:requestBody.recommendations.forEach(rec => { // 用map提取每个employeeId const employeeIds = rec.recommendedTo.map(emp => emp.employeeId); messageBody.recommendations.push({ book: rec.book, recommendedEmployeeIds: employeeIds }); }); console.log(messageBody); // 输出会是:{ recommendations: [ { book: '12', recommendedEmployeeIds: [ '22', '44' ] }, { book: '13', recommendedEmployeeIds: [ '2', '3' ] } ] }场景2:控制台把嵌套数组简化成
[array]了
很多终端或浏览器控制台为了不占太多空间,会把内层嵌套数组显示成[array],但其实数据是完整的。你可以用JSON.stringify()强制展开所有内容:// 第二个参数null,第三个参数2是用来格式化缩进的,方便阅读 console.log(JSON.stringify(messageBody, null, 2));这样就能看到完整的嵌套结构,不会再出现
[array]的简化标识。场景3:遍历的时候没处理数组里的每个元素
如果你是直接打印recommendedTo数组本身,而没遍历它的元素,那控制台就可能显示[array]。正确的做法是遍历recommendedTo里的每个对象:requestBody.recommendations.forEach(rec => { // 错误:直接打印数组 // console.log(rec.recommendedTo); // 正确:遍历每个员工对象,打印具体值 rec.recommendedTo.forEach(emp => { console.log(`推荐给员工ID:${emp.employeeId}`); }); });
总结一下
先明确你的需求:是要提取嵌套数组里的具体字段,还是要完整保留嵌套结构?如果是前者,就多做一层遍历/映射;如果是后者,用JSON.stringify()查看完整结构,别被控制台的简化显示骗啦~
内容的提问来源于stack exchange,提问作者Duplicated
相关产品推荐
相关产品推荐

