반응형
Recent Posts
Recent Comments
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Real Vectorism. 훨씬 더 입체적으로...

javascript groupby 억지구현 본문

JavaScript

javascript groupby 억지구현

grast 2022. 7. 27. 19:42
반응형

정의

Array.prototype.groupBy = function(mapper = util.mandatory("mapper")) {
    let keySet = new Set(this.map(mapper));
    let groupObj = {};
    
    for(const keyItem of keySet) {
        groupObj[keyItem] = this.filter(item => mapper(item) == keyItem);
    }
    
    return groupObj;
};

IE에서는 사용할 수 없도록 mandatory를 사용한 소스코드. IE는 생각조차도 하지 말것.

 

 

사용

const arr = [{
    "color": "red", 
    "gender": "female"
}, {
    "color": "red", 
    "gender": "female"
}, {
    "color": "blue", 
    "gender": "male"
}, {
    "color": "blue", 
    "gender": "male"
}];

arr.groupBy(item => item["color"]);
/*
{
    "red": [
        {
            "color": "red",
            "gender": "female"
        },
        {
            "color": "red",
            "gender": "female"
        }
    ],
    "blue": [
        {
            "color": "blue",
            "gender": "male"
        },
        {
            "color": "blue",
            "gender": "male"
        }
    ]
}
*/

arr.groupBy(item => item["gender"]);
/*
{
    "female": [
        {
            "color": "red",
            "gender": "female"
        },
        {
            "color": "red",
            "gender": "female"
        }
    ],
    "male": [
        {
            "color": "blue",
            "gender": "male"
        },
        {
            "color": "blue",
            "gender": "male"
        }
    ]
}
*/
반응형
Comments