首页 > 技术文章 > js对数组进行分组且赋值给某对象的属性

zwbsoft 2022-05-17 19:04 原文

在项目中遇到匹配规则给某对象,但多选时,得到的数据将会组成为一个数组,则需要给该数组进行分组。

使用接口,得到合集的数组。

this.dataArray = [
  {id:"1", codeid:"123", name:"名字1"},
  {id:"2", codeid:"123", name:"名字2"},
  {id:"3", codeid:"321", name:"名字3"},
  {id:"4", codeid:"321", name:"名字4"},
  {id:"5", codeid:"1234", name:"名字5"},
]
this.codeArray = [
{id:"123", codename:"代码1"},
{id:"321", codename:"代码2"},
{id:"1234", codename:"代码3"}
]

将上述数组根据某key值分类,使用该方法,根据codeid分组,并匹配给对应的对象的dataArray属性。

splitArraylist(data, key){
 let groups = {}
 data.forEach((item)=>{
   let value = item[key]
   groups[value] = groups[value]  || []
   groups[value].push(item)
 })
 return groups
},
splitCodeList(){
// 根据codeid给dataArray分组
 this.keylist = this.splitArraylist(this.dataArray,"codeid")
// 得到的数据为:
// this.keylist = [
// "123":[
// {id:"1", codeid:"123", name:"名字1"},
// {id:"2", codeid:"123", name:"名字2"}
// ],
// "321":[
// {id:"3", codeid:"321", name:"名字3"},
// {id:"4", codeid:"321", name:"名字4"}
// ],
// "1234":[
// {id:"5", codeid:"1234", name:"名字5"}
// ]

 this.codeArray.forEach((element)=>{
// 根据对象的id在keylist当中取到对应的数组,并赋值给属性
  element.dataArray = this.keylist[element.id]
})
}

 

则现在的codelist为:

this.codelist = [{
    id:"123", 
    codename:"代码1",
    dataArray;[
      {id:"1", codeid:"123", name:"名字1"},
      {id:"2", codeid:"123", name:"名字2"}
    ]
  },
  {
    id:"321", 
    codename:"代码2",
    dataArray;[
      {id:"3", codeid:"321", name:"名字3"},
      {id:"4", codeid:"321", name:"名字4"}
    ]
  },
  {
    id:"1234", 
    codename:"代码3",
    dataArray;[
      {id:"5", codeid:"1234", name:"名字5"}
    ]
  }
]}

 

推荐阅读