嵌套对象数组中的 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);
卡在这里了!如何迭代保存日期键的对象数组(例如 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);