Array.map函数不适用于Object值

时间:2019-05-09 09:54:38

标签: javascript arrays ajax object ecmascript-6

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

此后我进行console.log数据时,它显示的内容与初始响应相同,就好像完全忽略了map函数一样。

我在做什么错?感谢您的关注。

4 个答案:

答案 0 :(得分:2)

map 返回一个新数组,您将忽略调用结果。

答案 1 :(得分:1)

分配map调用的结果:

entry[1] = entry[1].map(...);

Array.prototype.map返回一个新数组-不会修改原始数组。

答案 2 :(得分:0)

您必须重新分配entry

  entry[1] = entry[1].map(/*...*/);

但是,这只会反映到entries内部的数组中,不会更改DATA。要更改此设置,您必须将键值对最后转换回一个对象:

  DATA = Object.fromEntries(entries);

否则,您必须在迭代时重新分配DATA属性:

   DATA[ entry[0] ] = entry[1].map(/*...*/);

我愿意:

  const { data } = response;

  for(const [key, value] of Object.entries(data)) {
     data[key] = value.map(/*...*/);
  }

答案 3 :(得分:0)

    let result = {};
    for (const entry of entries) {
        result[entry[0]] = entry[1].map(entry => ({
            id: entry.id,
            mixed_info: `${entry["name"]  }, ${  entry["info"]}`,
        }));
    }

“结果”包含精确的重映射对象。