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

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

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

<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>

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/JunVei/article/details/126743491