数组对象里属性的归类

71 阅读2分钟

遇到一个需求,需要统计一个数组对象里面的重复的字段的属性值Value

const data = [
  { name: '项目1', value: 40 },
  { name: '项目1', value: 40 },
  { name: '项目1', value: 40 },
  { name: '项目1', value: 40 },
  { name: '项目1', value: 32 },
  { name: '项目1', value: 16 },
  { name: '项目1', value: 32 },
  { name: '其他', value: 10 },
  { name: '项目1', value: 40 },
  { name: '项目1', value: 16 },
  { name: '项目2', value: 24 },
  { name: '项目1', value: 40 },
  { name: '项目1', value: 8 },
  { name: '项目3', value: 32 },
  { name: '项目1', value: 24 },
  { name: '项目3', value: 24 },
  { name: '项目1', value: 20 },
  { name: '项目4', value: 7 },
  { name: '项目2', value: 13 },
  { name: '项目1', value: 24 },
  { name: '项目1', value: 40 },
  { name: '项目1', value: 40 },
  { name: '项目5', value: 40 },
  { name: '项目1', value: 16 },
  { name: '项目5', value: 24 },
  { name: '项目5', value: 24 },
  { name: '项目1', value: 4 },
  { name: '项目5', value: 36 },
  { name: '项目5', value: 24 },
  { name: '项目6', value: 24 },
  { name: '项目5', value: 32 },
  { name: '项目6', value: 43 },
  { name: '项目1', value: 40 },
  { name: '项目3', value: 8 },
  { name: '项目7', value: 44 },
  { name: '项目7', value: 32 },
  { name: '项目6', value: 8 },
  { name: '项目7', value: 40 },
  { name: '项目7', value: 40 },
  { name: '项目7', value: 49 },
  { name: '项目7', value: 40 },
  { name: '项目7', value: 40 },
  { name: '项目8', value: 32 },
  { name: '项目7', value: 32 },
  { name: '项目7', value: 40 },
  { name: '项目9', value: 24 },
  { name: '项目8', value: 16 },
  { name: '项目8', value: 40 },
  { name: '项目2', value: 32 }
]
已知上面的数组对象,我们需要把重复的字段值保存在一个数组当中,也就是下面这样
const newdata = [
  {
    name: '项目1',
    value: [
      40, 40, 40, 40, 32, 16, 32,
      40, 16, 40,  8, 24, 20, 24,
      40, 40, 16,  4, 40
    ]
  },
  { name: '其他', value: [ 10 ] },
  { name: '项目2', value: [ 24, 13, 32 ] },
  { name: '项目3', value: [ 32, 24, 8 ] },
  { name: '项目4', value: [ 7 ] },
  { name: '项目5', value: [ 40, 24, 24, 36, 24, 32 ] },
  { name: '项目6', value: [ 24, 43, 8 ] },
  {
    name: '项目7',
    value: [
      44, 32, 40, 40, 49,
      40, 40, 32, 40
    ]
  },
  { name: '项目8', value: [ 32, 16, 40 ] },
  { name: '项目9', value: [ 24 ] }
]

话不多说直接上代码 先遍历原数组,将项目名字加入到数组nameArr中,并判断有无重复,如果有重复的话,就将重复的元素的value值加入到数组newArr的对应元素上

   const nameArr = []
   const newArr = []
   function StaticValue(data) {
      data.forEach((ele, i) => {
         if(nameArr.indexOf(data[i].name) === -1) {
           newArr.push({
             name: data[i].name,
             value: [data[i].value]
           })
           nameArr.push(data[i].name)
         } else {
           newArr.forEach((item, index) => {
             if(newArr[index].name == data[i].name) {
                newArr[index].value.push(data[i].value)
             }
           })
         }   
       }
     )
   }
   StaticValue(data)
   console.log(newArr)

运行结果如下图所示。 image.png