Array.map函数未作用于API返回对象的数组值,求排查问题
为啥我的数组映射完全没生效?
我看了你的代码,问题出在对map()方法的理解上——它是个不会修改原数组的纯函数,你现在只是调用了它,但根本没把它返回的新数组存下来替换掉原来的数据,所以原响应自然纹丝不动啦。
具体来说,你的代码里有两个关键问题:
entry[1].map(...)执行后会返回一个新数组,但你没把这个新数组赋值回DATA对应的属性里,原数组完全没被替换- 循环里的变量名重复了(外层的
entry和map回调里的entry重名),虽然不报错,但很容易搞混,建议改成不同的名字
修正后的代码示例
你可以用Object.fromEntries来更简洁地处理整个对象,一次性完成所有数组的映射:
const DATA = response.data; // 用Object.fromEntries把处理后的键值对重新组装成对象 const transformedData = Object.fromEntries( Object.entries(DATA).map(([key, arr]) => { // 对每个数组里的对象做映射,返回新数组 const mappedArr = arr.map(item => ({ id: item.id, mixed_info: `${item.name}, ${item.info}` })); // 返回[key, 新数组]的键值对 return [key, mappedArr]; }) ); console.log(transformedData); // 这里就能看到映射后的结果啦
如果还是想用原来的循环方式,记得要把map的结果赋值回原对象的属性:
const DATA = response.data; const entries = Object.entries(DATA); for (const [key, arr] of entries) { // 把map返回的新数组赋值回DATA对应的key DATA[key] = arr.map(item => ({ id: item.id, mixed_info: `${item.name}, ${item.info}` })); } console.log(DATA); // 现在就能看到修改后的结果了
核心就是记住:map()不会改变原数组,必须手动把它返回的新数组替换掉原来的数组,才能看到变化哦~
内容的提问来源于stack exchange,提问作者joao-m-santos
相关产品推荐
相关产品推荐

