【发布时间】:2020-03-12 08:18:13
【问题描述】:
我有一个对象数组。每个对象包含另一个内部数组。我想将每个内部数组作为外部对象,并将剩余的旧外部元素作为新创建的外部对象的子属性。
输入
data = [
{
name: "Sam",
ssn: 123,
age: 25,
hobbies: [{ name: "cricket" }, { name: "football" }]
},
{
name: "John",
ssn: 234,
age: 25,
hobbies: [{ name: "cricket" }, { name: "football" }]
},
{
name: "Mathew",
ssn: 345,
age: 25,
hobbies: [{ name: "cricket" }, { name: "football" }, {name: "carroms"}]
}
];
预期输出
[
{
name: "cricket",
person_details: [
{ name: "Sam", ssn: 123, age: 25 },
{ name: "John", ssn: 234, age: 25 },
{ name: "Mathew", ssn: 345, age: 25 }
]
},
{
name: "football",
person_details: [
{ name: "Sam", ssn: 123, age: 25 },
{ name: "John", ssn: 234, age: 25 },
{ name: "Mathew", ssn: 345, age: 25 }
]
},
{
name: "carroms",
person_details: [
{ name: "Mathew", ssn: 345, age: 25 }
]
}
]
我使用 Reduce 的尝试如下
this.data = this.data.reduce(
(a, x) => [...x.hobbies.map(h => ({ ...x, hobbies: [h] }))],
[]
);
【问题讨论】:
-
为什么要在输出中输入
hobbies:?你为什么不在循环中访问h.name? -
当我看到这样的代码时,我想知道你是不是在尝试,或者你只是随机地将一些东西放在一起,所以我们不会因为没有显示尝试而关闭问题。
-
嘿伙计。我尝试了一些东西,但我不清楚如何通过添加扩展、箭头、es6 功能来简单地实现这一点。这可以很容易地使用多个 for 循环来完成,但我的目的是尽量减少复杂性和代码。
-
使用 spread 和 reduce 来缩短代码并不总能最小化复杂性。写清楚。
标签: javascript arrays reduce arrayofarrays