程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了按组名和子项对对象数组进行分组大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决按组名和子项对对象数组进行分组?

开发过程中遇到按组名和子项对对象数组进行分组的问题如何解决?下面主要结合日常开发的经验,给出你关于按组名和子项对对象数组进行分组的解决方法建议,希望对你解决按组名和子项对对象数组进行分组有所启发或帮助;

我有一个对象数组。我需要按组和儿童对这个数组进行分组。我试图创建一个新数组,其中组名作为键和值作为按组分组的排序数组,但没有给我例外格式。我该怎么做?

以下是我的数据格式:

var data1 = [{
    "name": "Apparel","categoryID": 2742,"categoryname": "Men",},{
    "name": "Fragrances","categoryID": 2746,{
    "name": "Apparel","categoryname": "Women",}
];

预期输出是:

var data2 = [{
    "categoryname": "Men","children": [{
        "name": "Apparel","categoryID": 2742
      },{
        "name": "Fragrances","categoryID": 2746
      }
    ]
  },{
    "categoryname": "Women","categoryID": 2746
      }
    ]
  }
]

我使用过这个函数,但输出不符合预期,但非常接近解决方案

function groupAndSort(array,groupFIEld,sortFIEld) {
  var groups = {}; // This object will end being keyed by groups,and elements will be arrays of the rows within the given array,which have been sorted by the sortFIEld
  // Put all the rows into groups
  for (var i = 0; i < array.length; i++) {
    var row = arraY[i];
    var groupValue = row[groupFIEld];
    groups[groupValue] = groups[groupValue] || [];
    groups[groupValue].push(row);
  }
  // Sort each group
  for (var groupValue in groups) {
    groups[groupValue] = groups[groupValue].sort(function(a,b) {
      return a[sortFIEld] - b[sortFIEld];
    });
  }
  // Return the results
  return groups;
}

groupAndSort(data1,"categoryname","position"))

这是该代码的输出:

{
  Men: [{
  categoryID: 2742,categoryname: "Men",name: "Apparel"
},{
  categoryID: 2746,name: "Fragrances"
}],Women: [{
  categoryID: 2742,categoryname: "Women",name: "Fragrances"
}]
}

我非常接近解决方案,我只需要一些帮助即可按预期完成,非常感谢您的帮助

解决方法

从上次停止的地方开始,您所要做的就是遍历对象并将键和关联的数组推送到新的最终数组。

const data = {
  Men: [{
  categoryId: 2742,categoryName: "Men",Name: "Apparel"
},{
  categoryId: 2746,Name: "Fragrances"
}],Women: [{
  categoryId: 2742,categoryName: "Women",Name: "Fragrances"
}]
}

const final = [];

for (const key in data) {
  final.push({
    categoryName: key,children: data[key]
  })
}

console.log(final);

,

您需要分组对象的 Object.values()

const group  = {}; 

data1.forEach(({CategoryName,...rest})=>{
    group[categoryName] = group[categoryName] || {CategoryName,children:[]};
    group[categoryName].children.push(rest)
});

const res = Object.values(group)

console.log(res)
<script>
var data1 = [ 
          {
           "Name": "Apparel","categoryId": 2742,"categoryName": "Men",},{
           "Name": "Fragrances","categoryId": 2746,{
           "Name": "Apparel","categoryName": "Women",}
         ];
</script>

,

groups 对象的键是 categoryName,值是 children 数组,所以一个简单的映射:

  // Return the results
  // return groups;
  return Object.entries(groups).map(([categoryName,children]) => ({CategoryName,children}));

大佬总结

以上是大佬教程为你收集整理的按组名和子项对对象数组进行分组全部内容,希望文章能够帮你解决按组名和子项对对象数组进行分组所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。