如何解决JavaScript 获取与另一个字段集中的每个值对应的字段值数组
这样的对象数组const data = [
{'name': 'apple','type': 'fruit','quantity': 5},{'name': 'orange','quantity': 8},{'name': 'broccoli','type': 'vegetable',...
]
对于 type
的每个唯一值,我需要返回一个数组,如
output = [
{
'field': 'fruit','count': 2,'minQuantity': 5,'maxQuantity': 8,'values': ['apple','orange']
},{
'field': 'vegetable','count': 1,'maxQuantity': 5,'values': ['broccoli']
}
]
有没有简单/有效的方法来做到这一点?
到目前为止我尝试过的:
let returnData = [];
let fieldSet = new Set(data.map(a => a.type));
let fields = Array.from(fieldSet);
for (var i = 0; i < fields.length; i++) {
let objs = data.filter(obj => {
return obj.type === fields[i]
})
returnData.push({
field: fields[i],count: objs.length
})
}
解决方法
您可以先使用 Array.prototype.reduce
按类型对数据进行分组,然后使用 Object.entries
和 Array.prototype.map
将对象转换为数组。
const data = [
{'name': 'apple','type': 'fruit','quantity': 5},{'name': 'orange','quantity': 8},{'name': 'broccoli','type': 'vegetable',];
const EMPTY_GROUP = {
minQuantity: Infinity,maxQuantity: -Infinity,count: 0,values: []
};
const dataGroupedByType = data.reduce((result,item) => {
const { name,type,quantity } = item;
result[type] = result[type] || EMPTY_GROUP;
const group = result[type];
result[type] = {
minQuantity: Math.min(group.minQuantity,quantity),maxQuantity: Math.max(group.maxQuantity,count: group.count + 1,values: [...group.values,name]
};
return result;
},{});
const result = Object.entries(dataGroupedByType).map(([type,group]) => ({
field: type,...group
}));
console.log(result);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。