将数组与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上有什么错误吗。密钥必须存在于它们中的每一个,并且对于具有相同名称的对象也应该相同