我正在尝试重新映射来自API调用的对象。响应的格式如下:
data: {
foo: [{
id: "1",
name: "joe",
info: "whatever"
}, {
id: "2",
name: "anna",
info: "whatever"
},...],
bar: [...]
}
我用来重新映射每个响应数组中的对象的代码为:
const DATA = response.data;
const entries = Object.entries(DATA);
for (const entry of entries) {
entry[1].map(entry => ({
id: entry["id"],
mixed_info: entry["name"] + ", " + entry["info"]
}));
}
当我安装此之后的数据时,它显示与初始响应相同,就好像它完全忽略了地图函数一样。
我在做什么错?感谢您的关注。
map
返回一个新数组,您忽略了呼叫的结果。
分配map
调用的结果:
entry[1] = entry[1].map(...);
Array.prototype.map
返回一个新数组 - 它不修改原始数组。
您必须重新分配entry
:
entry[1] = entry[1].map(/*...*/);
但是,这只会反映到entries
内部的数组,它不会更改DATA
。要更改它,您必须将钥匙值配对将钥匙值配对回到末端:
DATA = Object.fromEntries(entries);
,或者您必须在迭代时重新分配数据属性:
DATA[ entry[0] ] = entry[1].map(/*...*/);
我会做:
const { data } = response;
for(const [key, value] of Object.entries(data)) {
data[key] = value.map(/*...*/);
}
let result = {};
for (const entry of entries) {
result[entry[0]] = entry[1].map(entry => ({
id: entry.id,
mixed_info: `${entry["name"] }, ${ entry["info"]}`,
}));
}
'结果'包含精确的重新映射对象。