不确定标题是否正确,但我有一个JS对象,如下所示:
parent:{
children:[
{
id: "1"
user:[
{
id: 'aa',
email:'aa@google.com'
},
{
id: 'b',
email:'bbb@google.com'
},
]
},
{
id:"2",
user: [
{
id:'aa',
email:'aa@google.com'
},
{
id:'eee',
email:'eee@google.com'
}
]
}
]
}
对象更大但遵循上述结构。
我如何获取每个用户所在的主题列表,过滤后的ID? 例如。 ' AA'参加1和2名儿童 ' B'参加儿童1 等
我弄明白我必须映射对象但不确定如何继续
答案 0 :(得分:2)
假设您想要一个对象作为关键字和对象中的所有主题id,那么您可以使用关联的id迭代数组构建一个属性。
var data = { project: { topics: [{ id: "1", participants: [{ id: 'aa', email: 'aa@google.com' }, { id: 'b', email: 'bbb@google.com' }, ] }, { id: "2", participants: [{ id: 'aa', email: 'aa@google.com' }, { id: 'eee', email: 'eee@google.com' }] }] } },
result = Object.create(null);
data.project.topics.forEach(function (a) {
a.participants.forEach(function (b) {
result[b.id] = result[b.id] || [];
result[b.id].push(a.id);
});
});
console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:0)
你可以写一个像这样的函数:
<div class="container">
<div class="left-child">
</div><!--
--><div class="right-child">
</div>
</div>
<div class="container">
<div class="left-child">
</div><!--
--><div class="right-child">
</div>
</div>
此函数返回带有相应id或空对象的finded主题。
答案 2 :(得分:0)
您可以循环主题数组并构建新的结果用户数组,如果用户已存在则只更新用户主题列表,否则创建一个具有名称,电子邮件和主题列表的新用户。
let result = [];
project.topics.forEach((t) => {
t.participants.forEach((p) => {
let found = result.find((r) => r.name === p.id);
if (found) {
found.topics.push(t.id);
} else {
result.push({
name: p.id,
email: p.email,
topics: [t.id]
});
}
});
});
所以现在当你得到结果数组时,你可以找到一个用户并获得她参与的主题
let aa = result.find((r) => r.name === 'aa');
console.log(aa.topics);