image.png
第一种方式 ===
var data = [
{eid: 'cat', name: 'aa'},
{eid: 'cat', name: 'bb'},
{eid: 'dog', name: 'cc'},
{eid: 'cat', name: 'dd'},
{eid: 'pig', name: 'ee'},
{eid: 'cat', name: 'ff'},
{eid: 'dog', name: 'gg'}
]
function trans (data) {
let cache = {} // cache存储的键是eid,值是这个eid在indices数组中的下标
let indices = [] // 数组中的每一个值是一个数组,数组中的每一个元素是原数组中相同eid的下标
data.forEach((item, i) => {
let eid = item.eid
let index = cache[eid]
if (index !== undefined) {
indices[index].push(i)
} else {
cache[eid] = indices.length
indices.push([i])
}
})
/**
* 此时,cache:{cat: 0, dog: 1, pig: 2}
* indices: [[0, 1, 3, 5], [2, 6], [4]]
* indices中的第1项是eid为cat的数组下标
* indices中的第2项是eid为dog的数组下标
* indices中的第3项是eid为pig的数组下标
*/
let result = []
indices.forEach(item => {
item.forEach(index => {
result.push(data[index]) // 依次把index对应的元素data[index]添加进去即可
})
})
return result
}
let result = trans(data)
console.log(result)
image.png
第一种方式 sort
let c= [
{eid: 'cat', name: 'aa'},
{eid: 'cat', name: 'bb'},
{eid: 'dog', name: 'cc'},
{eid: 'cat', name: 'dd'},
{eid: 'pig', name: 'ee'},
{eid: 'cat', name: 'ff'},
{eid: 'dog', name: 'gg'}
].sort((a, b) => {
return a.eid > b.eid ? 1 : -1
})
console.log("omn",c)