Javascript ES6按相同内容排序
当我在对象数组上使用时,您好Javascript ES6按相同内容排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,当我在对象数组上使用时,您好 const myArray = [{id: "C", grade: "bad", name: "John"}, {id: "A", grade: "good", name: "Peter"}, {id: "A", grade: "good", name: "Lucia"}, {id: "B", grade: "average", name: "Thomas"}] 此函数 const groupedReactions = myArray.reduce( (ent
const myArray = [{id: "C", grade: "bad", name: "John"},
{id: "A", grade: "good", name: "Peter"},
{id: "A", grade: "good", name: "Lucia"},
{id: "B", grade: "average", name: "Thomas"}]
此函数
const groupedReactions = myArray.reduce(
(entryMap, e) => entryMap.set(e.id, [...(entryMap.get(e.id) || []), e]),
new Map()
);
我能到这里
Map {
'A' => [ { id: 'A', grade: 'good', name: 'Peter' }, { id: 'A', grade: 'good', name: 'Lucia' } ],
'B' => [ { id: 'B', grade: 'average', name: 'Thomas' } ],
'C' => [ { id: 'C', grade: 'bad', name: 'John' } ] }
但我希望看到这个输出
{
"A": [{name:"Peter"},{name:"Lucia"}],
"B": [{name:"Thomas"}],
"C": [{name:"John"}]
}
你能帮我修改这个函数吗?
还是我应该用一个新的?
谢谢使用rest语法(
…
)解构对象,只获取所需的属性。将地图转换为具有对象的对象。fromEntries()
:
constmyarray=[{“id”:“C”,“grade”:“bad”,“name”:“John”},{“id”:“A”,“grade”:“good”,“name”:“Peter”},{“id”:“A”,“grade”:“good”,“name”:“Lucia”},{“id”:“B”,“grade”:“average”,“name”:“Thomas”}]
const groupedReactions=Object.fromEntries(myArray.reduce(
(entryMap,{id,grade,…e})=>entryMap.set(id,[…(entryMap.get(id)| |[]),e]),
新地图()
))
log(groupedReactions)
解构对象,并使用rest语法只获取所需的属性(…
)。将地图转换为具有对象的对象。fromEntries()
:
constmyarray=[{“id”:“C”,“grade”:“bad”,“name”:“John”},{“id”:“A”,“grade”:“good”,“name”:“Peter”},{“id”:“A”,“grade”:“good”,“name”:“Lucia”},{“id”:“B”,“grade”:“average”,“name”:“Thomas”}]
const groupedReactions=Object.fromEntries(myArray.reduce(
(entryMap,{id,grade,…e})=>entryMap.set(id,[…(entryMap.get(id)| |[]),e]),
新地图()
))
console.log(groupedReactions)
Hmmm。。。用“”A“:[“彼得”,“露西亚”],
代替“”A“:[{name:“彼得”},{name:“露西亚”}],
?您将找到两种解决方案:
constmyarray=[{id:“C”,grade:“bad”,name:“John”},
{id:“A”,等级:“好”,名字:“彼得”},
{id:“A”,等级:“好”,名字:“Lucia”},
{id:“B”,年级:“平均”,姓名:“托马斯”}]
const note={};
myArray.forEach((学生)=>{
const key=student.id
如果(!注意[键])
注意[键]=[]
注意[key].push(student.name)//或:.push({name:student.name})
});
控制台日志(注)代码>Hmmm。。。用“”A“:[“彼得”,“露西亚”],
代替“”A“:[{name:“彼得”},{name:“露西亚”}],
?您将找到两种解决方案:
constmyarray=[{id:“C”,grade:“bad”,name:“John”},
{id:“A”,等级:“好”,名字:“彼得”},
{id:“A”,等级:“好”,名字:“Lucia”},
{id:“B”,年级:“平均”,姓名:“托马斯”}]
const note={};
myArray.forEach((学生)=>{
const key=student.id
如果(!注意[键])
注意[键]=[]
注意[key].push(student.name)//或:.push({name:student.name})
});
控制台日志(注)
wau,这看起来很好,只是一个问题,如果我将对象简化为“name”而不是“grade”?我现在有成绩了:/I我必须逐行理解代码:使用grade
调整开关name
,因为出现在..
之前的属性将不包括在输出对象中(e
)。更新了答案。我们将id
和grade
解构出来,并将其余部分收集到一个对象中(e
)。如果id
下没有值,则将其设置为空数组。始终将当前的e
推送到其原始id
property.wau下的数组中,这看起来很好。如果我将对象简化为“name”而不是“grade”,这看起来很好?我现在有成绩了:/I我必须逐行理解代码:使用grade
调整开关name
,因为出现在..
之前的属性将不包括在输出对象中(e
)。更新了答案。我们将id
和grade
解构出来,并将其余部分收集到一个对象中(e
)。如果id
下没有值,则将其设置为空数组。始终将当前e
推送到其原始id
属性下的数组中。这看起来最容易理解。。。是的,我可以考虑只有一系列名称:“现在我想继续和获得字符串:“好X 2(彼得,露西亚)-平均(托马斯)-坏(约翰)”我认为我的逻辑是坏的,因为这是更好地产生这个代码> {“好”:[彼得],“露西亚”],“平均”:[“托马斯”],“坏”:[“Field]”}
用你的代码做什么容易你可以像这样转换密钥:const convert={A:“好”,B:“平均”,C:“坏”}代码>然后:const key=convert[student.id]
这看起来最容易理解。。。是的,我可以考虑只有一系列名称:“现在我想继续和获得字符串:“好X 2(彼得,露西亚)-平均(托马斯)-坏(约翰)”我认为我的逻辑是坏的,因为这是更好地产生这个代码> {“好”:[彼得],“露西亚”],“平均”:[“托马斯”],“坏”:[“Field]”}
用你的代码做什么容易你可以像这样转换密钥:const convert={A:“好”,B:“平均”,C:“坏”}代码>然后:const key=convert[student.id]