//数组扩展:根据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 } ] }]