数组映射函数不适用于对象值



我正在尝试重新映射来自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"]}`,
        }));
    }

'结果'包含精确的重新映射对象。

相关内容

最新更新