数组对象中根据某一属性值筛选,如果该属性值相同,将对象中其他属性合并为一个数组

数组对象中根据某一属性值筛选,如果该属性值相同,将对象中其他属性合并为一个数组

此处只例举了两种方法,当然还有更多的方法

<script>
export default {
  data () {
    return {
      array: [
        {
          name: '土豆',
          val: '2'
        },
        {
          name: '土豆',
          val: '3'
        },
        {
          name: '马铃薯',
          val: '1'
        },
        {
          name: '西瓜',
          val: '6'
        },
        {
          name: '西瓜',
          val: '4'
        },
        {
          name: '马铃薯',
          val: '5'
        }
      ]
    }
  },
  mounted () {
  //方法一
    const temArr = []
    // name不重复的数组
    const newArr = []
    for (let i = 0; i < this.array.length; i++) {
      // 判断temArr是否存在与array数组中name相同的值,有则跳过,无则插入
      if (temArr.indexOf(this.array[i].name) === -1) {
        newArr.push({
          name: this.array[i].name,
          // 这里要写成数组的形式,后面需要将name相同的val值合并成一个数组
          valList: [this.array[i].val]
        })
        // 插入名字,防止出现相同名字的数据
        temArr.push(this.array[i].name)
      } else {
        // 循环name不重复的数组
        for (let j = 0; j < newArr.length; j++) {
          // 跟原数组进行name的比对
          if (newArr[j].name === this.array[i].name) {
          // 相同,将val值插入valList数组
            newArr[j].valList.push(this.array[i].val)
          }
        }
      }
    }
    console.log(newArr)
// 方法二
    const newArr = {}
    this.array.forEach((item) => {
      if (!newArr[item.name]) {
        newArr[item.name] = {
          name: item.name,
          valList: []
        }
      }
      newArr[item.name].valList.push(item.val ? item.val : '')
    })
// 方法n...
  }
}
</script>

在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别改我bug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值