通过对象属性去重数组中的对象

针对的数据结构

   let ary = [{ id: '123', age: 12, name: '张三' },
               { id: '12', age: 16, name: '李四' },
               { id: '1234', age: 12, name: '王五' },
               { id: '123', age: 12, name: '张三' },
               { id: '1234', age: 18, name: '王五' },]

数组方法扩展(去重数组元素中 对象相同属性的数组对象元素)

  • function_name: restoreData
  • key: String [去重该属性值一样的数组里的对象]
  • 使用: let ary1 = ary.restoreData(key)
Array.prototype.restoreData = function restoreData (key) {
   console.log(this)
   let _this = this
   console.log(_this)
   if (_this.length < 1) {
     throw new Error('The length must be greater than 1')
   }
   if (Object.prototype.toString.call(_this[0]) !== "[object Object]") {
     throw new Error('This array element is not a normal standard object type')
   }
   let _arr = []
   _this.forEach(item => {
     _arr.push(item[key])
   })
   _arr = Array.from(new Set(_arr))
   _this.forEach(item => {
     for (let i = 0; i < _arr.length; i++) {
       if (item[key] === _arr[i]) {
         _arr[i] = item
       }
     }
   })
   return _arr
 }

第二种方案

let arr = [
  { id: '123', age: 12, name: '张三' },
  { id: '12', age: 16, name: '李四' },
  { id: '1234', age: 12, name: '王五' },
  { id: '123', age: 12, name: '张三' },
  { id: '1234', age: 18, name: '王五' }
];
Array.prototype.restoreData = function (key) {
  let _this = this
  if (_this.length < 1) {
    throw new Error('The length must be greater than 1')
  }
  if (Object.prototype.toString.call(_this[0]) !== "[object Object]") {
    throw new Error('This array element is not a normal standard object type')
  }
  if (_this.length === 1) return _this
  let _keys = []
  let _arr = []
  _this.map(item => {
    if (_keys.indexOf(item[key]) === -1) {
      _arr.push(item)
      _keys.push(item[key])
    }
  })
  return _arr
}
let newArr = arr.restoreData('id')
console.log(newArr)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值