首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对象的嵌套数组中的forEach循环

对象的嵌套数组中的forEach循环
EN

Stack Overflow用户
提问于 2021-06-11 10:22:50
回答 4查看 104关注 0票数 0

就在这里!如何在保存日期键的情况下迭代此对象数组(例如10/06/2021)?并迭代对象的skills数组?

该数组必须如下所示:

代码语言:javascript
运行
复制
    const data = [
  {
     name: 10/06/2021,
     sprint speed: "4.00",
     stamina: "4.00",
     acceleration: "4.00"
  },
    .....
    ....
    ...
  ]

我正在尝试:

代码语言:javascript
运行
复制
Object.keys(element.dates).forEach((date) => {
        if (normalizedSkillsObject[date]) {
          let normalizedTemps = {
            ...normalizedSkillsObject[date],
            ...{ name: date, data: element.dates[date].skills },
          };
          normalizedSkillsObject = {...normalizedSkillsObject, [date]: normalizedTemps}
        } else {
          normalizedSkillsObject = {
            ...normalizedSkillsObject,
            [date]: { name: date, data: element.dates[date].skills.forEach(s => s.name) },
          };
        }
      });

但这是输出:

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-06-11 11:04:22

代码语言:javascript
运行
复制
const json = [
  {
    dates: {
      "10/06/2021": {
        average: 4,
        skills: [
          { id: "1", name: "acceleration", avg: "4.00" },
          { id: "2", name: "sprint speed", avg: "4.00" },
          { id: "3", name: "stamina", avg: "4.00" },
        ],
      },
      "13/04/2021": {
        average: 2.97,
        skills: [
          { id: "1", name: "acceleration", avg: "4.00" },
          { id: "2", name: "sprint speed", avg: "4.00" },
          { id: "3", name: "stamina", avg: "4.00" },
        ],
      },
    },
  },
  {
    dates: {
      "20/04/2021": {
        average: 4,
        skills: [
          { id: "1", name: "acceleration", avg: "4.00" },
          { id: "2", name: "sprint speed", avg: "4.00" },
          { id: "3", name: "stamina", avg: "4.00" },
        ],
      },
    },
  },
];

const result = json.flatMap(({ dates }) => {
  return Object.entries(dates).map(([name, value]) =>
    Object.assign({ name }, ...value.skills.map(({ name, avg }) => ({ [name]: avg })))
  );
});

console.log(result);

票数 2
EN

Stack Overflow用户

发布于 2021-06-11 10:56:19

代码语言:javascript
运行
复制
const obj = {
  dates: {
    "10/06/2021": {
      skills: [
        { id: 1, name: "accel", avg: "4.0" },
        { id: 2, name: "sprint speed", avg: "4.0" },
        { id: 2, name: "agility", avg: "0.00" },
      ],
    },
    "10/07/2021": {
      average: 4,
      skills: [
        { id: "1", name: "acceleration", avg: "4.00" },
        { id: "2", name: "sprint speed", avg: "4.00" },
        { id: "3", name: "stamina", avg: "4.00" },
      ],
    },
  },
};

const res = Object.entries(obj.dates).reduce(
  (acc, [date, { skills }]) => [
    ...acc,
    {
      name: date,
      ...skills
        .filter(({ avg }) => Number(avg)) // remove skill avg's that are 0
        .reduce((a, { name, avg }) => ({ ...a, [name]: avg }), {}),
    },
  ],
  []
);
console.log(res);

票数 1
EN

Stack Overflow用户

发布于 2021-06-11 10:45:55

我没有办法来测试这一点--你没有给出数据来处理,但它看起来很直截了当。如果这不正确,请上传您的数据,我会对其进行微调

代码语言:javascript
运行
复制
let data = {}
for (const [date, props] of Object.entries(element.dates)) {
  let tmpObj= {name: date};
  props.skills
     .filter( skill => ["sprint speed","stamina","acceleration"].contains(skill.name))
     .forEach(sk => {tmpObj[sk.name] = sk.avg});
  data.push(tmpObj);
}

console.log(data)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67930536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档