JS - 对象数组根据key重新分组

40 阅读1分钟
//数组扩展:根据key重新分组
//field:按什么字段分组
Array.prototype.GroupByKey = function ( field )
{
    var originalArr = this
    let tempArr = []
    let resultData = []
    for ( let i = 0; i < originalArr.length; i++ )
    {
        if ( tempArr.indexOf( originalArr[ i ][ field ] ) === -1 )
        {
            resultData.push( {
                [ field ]: originalArr[ i ][ field ],
                data: [ originalArr[ i ] ]
            } )
            tempArr.push( originalArr[ i ][ field ] )
        } else
        {
            for ( let j = 0; j < resultData.length; j++ )
            {
                if ( resultData[ j ][ field ] == originalArr[ i ][ field ] )
                {
                    resultData[ j ].data.push( originalArr[ i ] )
                    break
                }
            }
        }
    }
    return resultData // 最终输出
}

使用例子:

var scoreArr = [    { name: "小明", subject: "语文", score: 88 },    { name: "小明", subject: "数学", score: 58 },    { name: "小红", subject: "数学", score: 85 },    { name: "小红", subject: "语文", score: 99 },]var resultArr = scoreArr.GroupByKey( "name" )

结果:

[    {        name: "小明",        data: [ { name: "小明", subject: "语文", score: 88 },        { name: "小明", subject: "数学", score: 58 } ]    },    {        name: "小红",        data: [ { name: "小红", subject: "数学", score: 85 },        { name: "小红", subject: "语文", score: 99 } ]    }]