javascript 数组处理,相同的放一起

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)    

原文引用地址:https://segmentfault.com/q/1010000017751288

你可能感兴趣的:(javascript 数组处理,相同的放一起)