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
在中存在两次,则可能会得到不同的值