将数组与javascript中的对象键和组进行比较

将数组与javascript中的对象键和组进行比较,javascript,lodash,Javascript,Lodash,我需要比较数组中的对象键和基于键值的分组 const days = [ {'name':'Mon','value':1}, {'name':'Tue','value':5}, {'name':'Wed','value':10}, {'name':'Wed','value':30}, {'name':'Fri','value':18}, {'name':'Sat','value':80}, {'name':'Sat','value':90}

我需要比较数组中的对象键和基于键值的分组

const days = [
    {'name':'Mon','value':1}, 
    {'name':'Tue','value':5},
    {'name':'Wed','value':10},
    {'name':'Wed','value':30},
    {'name':'Fri','value':18},
    {'name':'Sat','value':80},
    {'name':'Sat','value':90},
    {'name':'Sun','value':20},
]
我需要像这样分组

const result [[1],[5], [10, 30], [18], [80, 90], [20]]
我对javascript非常陌生,我不知道该怎么做。如果可以在lodash中使用es6,那么就可以了。

您可以使用,下面是您可以使用的方法


常数天数=[
{'name':'Mon','value':1},
{'name':'Tue','value':5},
{'name':'Wed','value':10},
{'name':'Wed','value':30},
{'name':'Fri','value':18},
{'name':'Sat','value':80},
{'name':'Sat','value':90},
{'name':'Sun','value':20},
];
var t=uu.groupBy(天,'name');
结果=[];
var s=Object.keys(t).forEach((i)=>{
var值=t[i];
var-temp=[];
值。forEach((v)=>{
温度推力(v值);
});
结果:推送(温度);
});
控制台日志(结果)

您可以在对象上循环,创建一个键到数据的映射,然后使用
object.values(newObj)

const days=[
{'name':'Mon','value':1},
{'name':'Tue','value':5},
{'name':'Wed','value':10},
{'name':'Wed','value':30},
{'name':'Fri','value':18},
{'name':'Sat','value':80},
{'name':'Sat','value':90},
{'name':'Sun','value':20},
]
设res={}
days.forEach(obj=>{
res={…res[obj.name]:[…(res[obj.name]| |[]),obj.value]}
})

console.log(Object.values(res))使用Lodash,您可以使用
groupBy
然后使用
map
方法来获得所需的结果

const days=[{“name”:“Mon”,“value”:1},{“name”:“Tue”,“value”:5},{“name”:“Wed”,“value”:10},{“name”:“Wed”,“value”:30},{“name”:“Fri”,“value”:18},{“name”:“Sat”,“value”:80},{“name”:“Sat”,“value”:90},{“name”:“Sun”,“value”:20}]
const result=uu.chain(天)
.groupBy('名称')
.values()
.map(a=>a.map(({value}=>value))
console.log(结果)

您可以在同一天获取一个对象,并过滤结果以仅获取填充数组

var-days=[{name:'Mon',value:1},{name:'Tue',value:5},{name:'Wed',value:10},{name:'Wed',value:30},{name:'Fri',value:18},{name:'Sat',value:80},{name:'Sat',value:90},{name:'Sun',value:20},
时隙={Mon:0,Tue:1,Wed:2,Thu:3,Fri:4,Sat:5,Sun:6},
结果=[];
days.forEach(({name,value})=>(result[slot[name]]=result[slot[name]]]| |[])。push(value));
result=result.filter(布尔值);
控制台日志(结果)用于将名称和值添加到。然后获取地图的,并将其返回到数组:

const days=[{“name”:“Mon”,“value”:1},{“name”:“Tue”,“value”:5},{“name”:“Wed”,“value”:10},{“name”:“Wed”,“value”:30},{“name”:“Fri”,“value”:18},{“name”:“Sat”,“value”:80},{“name”:“Sat”,“value”:90},{“name”:“Sun”,“value”:20}]
const result=[…days.reduce((m,{name,value})=>{
m、 has(name)| | m.set(name,[])//如果名称不在映射中,请使用空数组添加新键
m、 get(name).push(value)//获取名称的数组,并推送值
返回m
},new Map).values()]//将映射转换回数组

console.log(结果)
发布您尝试解决问题的代码!分组背后的逻辑是什么?@HarshPatel每周同一天:)您可以通过一个
reduce
调用来实现这一点,该调用如下:
天。reduce(fn,[[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[])
-尝试找出fn的外观结果对象与OP所要求的完全不同。目前为止唯一正确的答案。因为它不依赖于对象键的排序。谢谢你的回复,我在这一行出现了错误
res={…res,[obj.key]:[…(res[obj.key]|[]),obj.value]}
而不是
[obj.name]
我正在使用
[obj.key]
你能分辨出itobj上有什么错误吗。密钥必须存在于它们中的每一个,并且对于具有相同名称的对象也应该相同