如何对数组进行分组

2024-03-14

我正在尝试使用相同的标签对相似的对象进行分组。

目前,这是我收到的 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]};
});

您可以采用相同标签的哈希表并迭代外部数组和内部数组。如果未找到标签,它将为结果集生成一个新条目。

var 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' }],
    labels = Object.create(null),
    joined = sizes.reduce((r, a) => {
        var temp;
        a.id.forEach(o => {
            if (labels[o.label]) {
                labels[o.label].value += ',' + o.value;
                return;
            }
            if (!temp) {
                temp = Object.assign({}, a, { id: [] });
                r.push(temp);
            }
            temp.id.push(labels[o.label] = o);
        });
        return r;
    }, []);

console.log(joined);
.as-console-wrapper { max-height: 100% !important; top: 0; }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何对数组进行分组 的相关文章

随机推荐