如何在JS对象中获取父属性?

时间:2017-03-31 08:25:41

标签: javascript arrays object

不确定标题是否正确,但我有一个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 等

我弄明白我必须映射对象但不确定如何继续

3 个答案:

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