数组格式转换问题:对象数组转值数组的实现困惑
问题分析与解决方案
首先咱们先拆解下你代码里的几个核心问题:
- forEach回调参数理解错误:
forEach的回调函数第一个参数是当前遍历到的完整对象,不是直接的属性名。你写的function(ID,NAME,AGE)会把对象本身赋值给ID,遍历索引赋值给NAME,原数组赋值给AGE,完全偏离了你的需求。 - 拼写笔误:
result.psuh(AGE)里的psuh是错误写法,应该是push。 - 数组结构逻辑错误:你现在是把每个属性值单独
push到result里,最终会得到一维数组,而目标是二维数组——需要把每个对象的三个属性值打包成一个子数组,再整体push到结果数组中。
修正后的forEach写法
先把你的代码改成符合预期的版本:
var data = [{ "ID": "this THE ID", "NAME": "this THE NAME", "AGE": "thiS THE AGE" }, { "ID": "that ID", "NAME": "that THE NAME", "AGE": "that THE AGE" }]; var result = []; data.forEach(function(item) { // 将当前对象的三个属性值组成子数组,再推入结果数组 result.push([item.ID, item.NAME, item.AGE]); }); console.log(result);
更优雅的map写法
其实这种“将数组每个元素转换为另一种结构”的场景,用Array.map()更合适,代码更简洁直观:
var data = [{ "ID": "this THE ID", "NAME": "this THE NAME", "AGE": "thiS THE AGE" }, { "ID": "that ID", "NAME": "that THE NAME", "AGE": "that THE AGE" }]; var result = data.map(item => [item.ID, item.NAME, item.AGE]); console.log(result);
这个写法直接返回转换后的二维数组,不需要手动初始化空数组再逐个push,可读性和简洁性都更好。
运行上述代码后,就能得到你期望的目标格式:
[["this THE ID","this THE NAME","thiS THE AGE"], ["that ID","that THE NAME","that THE AGE"]]
内容的提问来源于stack exchange,提问作者Ahmed Brahimi
相关产品推荐
相关产品推荐

