javascript - 如何对数组进行分组
问题描述
我正在尝试将具有相同标签的相似对象分组。
目前,这是我收到的 JSON。
const sizes = [{
id: [{
value: '2496',
label: 'XS'
}, {
value: '2499',
label: 'S'
}],
type: 'First Size'
}, {
id: [{
value: '2863',
label: 34
}, {
value: '2866',
label: 36
}],
type: 'Shoe Sizes'
}, {
id: [{
value: '3561',
label: 'XS'
}, {
value: '3563',
label: 'S'
}, {
value: '3565',
label: 'L'
}, , {
value: '3567',
label: 'XL'
}]
}, {
id: [{
value: '3523',
label: 34
}, {
value: '2866',
label: 36
}],
type: 'Shoe Sizes'
}]
我想要达到的结果是
const sizes = [{
id: [{
value: '2496,3561',
label: 'XS'
}, {
value: '2499,3563',
label: 'S'
}],
type: 'First Size'
}, {
id: [{
value: '2863,3523',
label: 34
}, {
value: '2866',
label: 36
}],
type: 'Shoe Sizes'
}, {
id: [{
value: '3565',
label: 'L'
}, , {
value: '3567',
label: 'XL'
}]
}, {
id: [{
value: '2866',
label: 37
}],
type: 'Shoe Sizes'
}]
我尝试使用下划线来实现这一点,但我只能按一个标签对其进行分组,并且我需要按任何类型的标签对其进行分组,无论是 XS 还是 36。
我在下面尝试了 reduce,它很接近,但我只需要删除值周围的括号,然后将值转换为字符串。
例如:值:'2493, 2343'
var group_to_values = sizes.reduce(function (obj, item) {
obj[item.label] = obj[item.label] || [];
obj[item.label].push(item.value);
return obj;
}, {});
var groups = Object.keys(group_to_values).map(function (key) {
return {label: key, value: group_to_values[key]};
});
解决方案
在这里,下面的代码将输出 Array called result
,这是您想要的数据集,循环很清楚,所以我认为您通过它不会有问题:
const sizes = [{
id: [{
value: '2496',
label: 'XS'
}, {
value: '2499',
label: 'S'
}],
type: 'First Size'
}, {
id: [{
value: '2863',
label: 34
}, {
value: '2866',
label: 36
}],
type: 'Shoe Sizes'
}, {
id: [{
value: '3561',
label: 'XS'
}, {
value: '3563',
label: 'S'
}, {
value: '3565',
label: 'L'
}, {
value: '3567',
label: 'XL'
}]
}, {
id: [{
value: '3523',
label: 34
}, {
value: '2866',
label: 36
}],
type: 'Shoe Sizes'
}]
var groupedSizes = {};
for (var current, i=0;i < sizes.length ;i++){
for (var j=0;j < sizes[i]['id'].length;j++) {
current = sizes[i]['id'][j]
if (groupedSizes[current['label']] !== undefined) {
groupedSizes[current['label']].push(current['value'])
} else {
groupedSizes[current['label']] = [current['value']]
}
}
}
var result = []
for (var key in groupedSizes) {
result.push({'id': groupedSizes[key].join(','), 'label': key})
}
console.log(result)
推荐阅读
- python - ImportError:无法导入名称“deserialize_keras_object”
- javascript - 如何将多张图片上传到 sanity.io?
- python - 在 Eclipse IDE 中编写 python 代码时,有没有办法不连续进行新的启动配置?
- go - Golang 语法错误:赋值不匹配:4 个变量但 2 个值
- java - 如何传递给控制器方法请求体?
- node.js - Mongoose 深填充虚拟字段
- python - 使用 PDFminer (python) 在 PDF 中查找正则表达式不起作用
- latex - 在 Latex 中显示数据库示例 - 样式在 Stackoverflow 中
- javascript - 函数对象,“长度属性”
- highcharts - Highcharts - 捏缩放不适用于具有多个 y 轴的图表