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

forEach loop in nested array of objects Javascript

卡在这里了!如何迭代保存日期键的对象数组(例如 10/06/2021)?并迭代对象的技能数组?

数组必须如下所示:

    const data = [
  {
     name: 10/06/2021,
     sprint speed: "4.00",
     stamina: "4.00",
     acceleration: "4.00"
  },
    .....
    ....
    ...
  ]

我正在尝试:

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) },
          };
        }
      });

但这是输出:

我没有办法对此进行测试 - 您没有提供可使用的数据,但它看起来很简单。 Post你的数据如果不对我会微调

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)

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);

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);

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);

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);