js 处理数组对象,根据指定属性去重

js中想实现找到数组对象中相同的属性拿出来组成一个数组非常简单,只需要用filter即可实现;但是想去重就需要多费点脑子了。

常规思路:for嵌套循环

function unique(arr,u_key){
  let result = []
  result[0] = arr[0]
  arr.forEach((meta_item,i)=>{
    //声明计数变量,如果源数组中的一个对象和result结果数组中的所有对象不同,就push
    let num = 0
    result.forEach((r_item,j)=>{
      if (meta_item[u_key]!==r_item[u_key]) {
        num++
      }
      if (num === result.length) {
        result.push(meta_item)
      }
    })
  })
  return result
}

es6使用map思路
Map类型是键值对的有序列表,而键和值都可以是任意类型,所以我们可以通过map.get的方法确定是否有此属性与map.set设置数据的方法,结合filter去重

/**
 *    arr:要去重的数组
 *    attr: 去重根据的属性
 */
function unique(arr, attr) {
   const res = new Map();
   return arr.filter((item) => {
 
       var attrItem = item[attr]
       return !res.has(attrItem) && res.set(attrItem, 1)
 
   })
 }
 
console.log(unique(array2, "id")) // 去重后数组

使用lodash的uniqBy

let unarrlist = this.$lodash.uniqBy(Arrlist,'insurerCode');
console.log(unarrlist)

let unArr = this.$lodash.uniqBy(arrayList,'id');
console.log(unArr)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以在 if 语句中添加新的判断条件,以判断哪一科成绩不符合要求。代码示例如下: ``` const total = this.hzd_chinese + this.hzd_math + this.hzd_english + this.hzd_physics + this.hzd_chemistry; const average = total / 5.0; if (average >= 90 && this.hzd_chinese >= 80 && this.hzd_math >= 80 && this.hzd_english >= 80 && this.hzd_physics >= 80 && this.hzd_chemistry >= 80) { this.hzd_successMessage = `${this.hzd_name}可以参评奖学金`; this.hzd_success = '成功次数:' + (parseInt(this.hzd_success.split(':')[1]) + 1); } else { this.hzd_failure = '失败次数:' + (parseInt(this.hzd_failure.split(':')[1]) + 1); if (average < 90) { this.hzd_failMessage = `${this.hzd_name}不符合参评奖学金的条件,因为平均分不足90分。`; } else if (this.hzd_chinese < 80) { this.hzd_failMessage = `${this.hzd_name}不符合参评奖学金的条件,因为语文成绩不足80分。`; } else if (this.hzd_math < 80) { this.hzd_failMessage = `${this.hzd_name}不符合参评奖学金的条件,因为数学成绩不足80分。`; } else if (this.hzd_english < 80) { this.hzd_failMessage = `${this.hzd_name}不符合参评奖学金的条件,因为英语成绩不足80分。`; } else if (this.hzd_physics < 80) { this.hzd_failMessage = `${this.hzd_name}不符合参评奖学金的条件,因为物理成绩不足80分。`; } else if (this.hzd_chemistry < 80) { this.hzd_failMessage = `${this.hzd_name}不符合参评奖学金的条件,因为化学成绩不足80分。`; } } ``` 这样,如果有成绩不符合要求,提示信息会指出具体是哪一科成绩不足80分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值