Javascript Array.map函数为';t应用于对象值
我正在尝试重新映射来自API调用的对象。 答复的格式如下:Javascript Array.map函数为';t应用于对象值,javascript,arrays,ajax,object,ecmascript-6,Javascript,Arrays,Ajax,Object,Ecmascript 6,我正在尝试重新映射来自API调用的对象。 答复的格式如下: data: { foo: [{ id: "1", name: "joe", info: "whatever" }, { id: "2", name: "anna", info: "whatever" },...], bar: [...] } 我用来在每个响应数组中重新映射对象的代码是: const DATA
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"]
}));
}
当I console.log在此之后记录数据时,它将显示与初始响应相同的内容,就好像它完全忽略了map函数一样
我做错了什么?感谢您的关注。
map
返回一个新数组,您将忽略调用的结果。您必须重新分配条目
:
entry[1] = entry[1].map(/*...*/);
但是,这只会反映到条目中的数组中,它不会更改数据。要改变这一点,您必须在末尾将键值对转换回对象:
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(/*...*/);
}
分配map
调用的结果:
entry[1] = entry[1].map(...);
返回一个新数组-它不修改原始数组
let result = {};
for (const entry of entries) {
result[entry[0]] = entry[1].map(entry => ({
id: entry.id,
mixed_info: `${entry["name"] }, ${ entry["info"]}`,
}));
}
“result”包含精确的重新映射对象。您需要将map()
函数的结果指定给某个对象。..map()使用结果创建一个新数组。var updatesEntry=entry[1].map()……虽然我的答案事实上是正确的,但不清楚您实际想要实现什么,如果您明确表示,我可以修改我的答案以说明如何实现它。正如已经发现的那样,您应该利用map返回值,而且
的
的没有提供参考,但我完全忘记了,我的错。谢谢,就这样。