Angular 使用对象的角度贴图

Angular 使用对象的角度贴图,angular,typescript,Angular,Typescript,我正在编写一些我不熟悉的代码 我有一个如下所示的数据集: [ {"id": 1, "person_name": "joe", "parent_id": "1ax"} {"id": 2, "person_name": "jane", "parent_id": "5t6"} {"id&q

我正在编写一些我不熟悉的代码

我有一个如下所示的数据集:

[
 {"id": 1, "person_name": "joe", "parent_id": "1ax"}
 {"id": 2, "person_name": "jane", "parent_id": "5t6"}
 {"id": 3, "person_name": "john", "parent_id": "a88"}
]
[
 {name: "joe", rcount: 1},
 {name: "jane", rcount: 1},
 {name: "john", rcount: 1}
]
最初代码有以下行:

const values = this.data.map((d) => d.person_name).sort();
然后这个:

groups = Object.values(
            values.reduce((a, c) => {
                (a[c] || (a[c] = { name: c, rcount: 0 })).rcount += 1;
                return a;
            }, {})
        ).sort(({ rcount: ac }, { rcount: bc }) => bc - ac);
所有这些都会导致如下结果:

[
 {"id": 1, "person_name": "joe", "parent_id": "1ax"}
 {"id": 2, "person_name": "jane", "parent_id": "5t6"}
 {"id": 3, "person_name": "john", "parent_id": "a88"}
]
[
 {name: "joe", rcount: 1},
 {name: "jane", rcount: 1},
 {name: "john", rcount: 1}
]
我也想在最终输出中包含父id,但不知道如何添加

我在
.map()
部分尝试了很多方法,但都没有成功

我试过这个例子:

const values = this.data.map((d) => d.person_name, d.parent_id).sort();

是否有一种方法可以映射到一个对象,然后在执行reduce时从值中引用人名和父id?

这能解决问题吗

const数据=[{
“id”:1,
“人名”:“乔”,
“父项id”:“1ax”
}, {
“id”:2,
“人名”:“简”,
“家长id”:“5t6”
}, {
“id”:3,
“人名”:“约翰”,
“家长id”:“a88”
}];
/*旧的*/
//const values=this.data.map((d)=>d.person_name.sort();
//看起来像[乔”,“简”,“字符串]
/*新的*/
const values=data.map((d)=>({name:d.person\u name,parent\u id:d.parent\u id})).sort();
//看起来像[{name:'joe',parent_id:'1ax'},{name:'jane',parent_id:'5t6'},…object]
// https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/reduce
常量组=Object.values(
值。减少((a,c)=>{
//参数“a”是累加器
//参数“c”是数组中的当前元素
//由于数组不再包含字符串,而是包含对象,并且我们需要一个字符串作为数组索引,因此我们使用对象名属性,如“object.property”=>“c.name”
(a[c.name]| |(a[c.name]={
姓名:c.name,
rcount:0,
//我们添加属性parent\u id
家长id:c.家长id
})).rcount+=1;
返回a;
}, {})
).分类(({
计数:ac
}, {
rcount:bc
})=>bc-ac);

控制台日志(组)这能解决问题吗

const数据=[{
“id”:1,
“人名”:“乔”,
“父项id”:“1ax”
}, {
“id”:2,
“人名”:“简”,
“家长id”:“5t6”
}, {
“id”:3,
“人名”:“约翰”,
“家长id”:“a88”
}];
/*旧的*/
//const values=this.data.map((d)=>d.person_name.sort();
//看起来像[乔”,“简”,“字符串]
/*新的*/
const values=data.map((d)=>({name:d.person\u name,parent\u id:d.parent\u id})).sort();
//看起来像[{name:'joe',parent_id:'1ax'},{name:'jane',parent_id:'5t6'},…object]
// https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/reduce
常量组=Object.values(
值。减少((a,c)=>{
//参数“a”是累加器
//参数“c”是数组中的当前元素
//由于数组不再包含字符串,而是包含对象,并且我们需要一个字符串作为数组索引,因此我们使用对象名属性,如“object.property”=>“c.name”
(a[c.name]| |(a[c.name]={
姓名:c.name,
rcount:0,
//我们添加属性parent\u id
家长id:c.家长id
})).rcount+=1;
返回a;
}, {})
).分类(({
计数:ac
}, {
rcount:bc
})=>bc-ac);

控制台日志(组)将要显示的两个项目映射到一个数组:

数据=[
{“id”:1,“人名”:“乔”,“父母id”:“1ax”},
{“id”:2,“人名”:“jane”,“父母id”:“5t6”},
{“id”:3,“人名”:“约翰”,“父母id”:“a88”}
]
const values=data.map((d)=>[d.parent\u id,d.person\u name]).sort();
组=对象值(
值。减少((a,c)=>{
(a[c]| |(a[c]={name:c[1],id:c[0],rcount:0})).rcount+=1;
返回a;
}, {})
).sort({rcount:ac},{rcount:bc})=>bc-ac);

console.log(组)
将要显示的两个项目映射到一个数组:

数据=[
{“id”:1,“人名”:“乔”,“父母id”:“1ax”},
{“id”:2,“人名”:“jane”,“父母id”:“5t6”},
{“id”:3,“人名”:“约翰”,“父母id”:“a88”}
]
const values=data.map((d)=>[d.parent\u id,d.person\u name]).sort();
组=对象值(
值。减少((a,c)=>{
(a[c]| |(a[c]={name:c[1],id:c[0],rcount:0})).rcount+=1;
返回a;
}, {})
).sort({rcount:ac},{rcount:bc})=>bc-ac);

console.log(groups)
解释代码的答案被投票赞成的次数多于被投票反对的次数…我将编辑我的答案并解释它,我只是想确保它解决了问题。我添加了评论,让我知道它是否清晰,谢谢!现在我将把@HereticMonkey关于计数的内容合并到一起,你可以使用
c.name+c.parent\u id
作为一个键,而不是
c.name
,它可能会解决这个问题。这样,只有相同的名字和相同的家长id才会增加
rcount
。解释代码的答案被投票赞成的次数多于反对的次数…我会编辑我的答案并解释它,我只是想确保它解决了问题。我添加了注释,让我知道它是否清晰,谢谢!现在我将把@HereticMonkey关于计数的内容合并到一起,你可以使用
c.name+c.parent\u id
作为一个键,而不是
c.name
,它可能会解决这个问题。这样,只有相同的姓名和相同的家长id才会递增
rcount
。请注意,代码正在统计列表中
人名的唯一实例。如果添加
parent\u id
,如果列表中存在两个
person\u name
(在这种情况下,它将显示为
{name:“name”,rcount:2}
),但具有不同的
parent\u id
s(在这种情况下,它可能显示为
{name:“name”,parent\u id:“1ax”,rcount:1},{name:“name”,parent_id:5t6,rcount:1}
)…请注意,代码正在统计列表中
人名
的唯一实例。如果添加
parent\u id
,如果
person\u name
在中存在两次,则可能会得到不同的值