繁体   English   中英

如何通过JavaScript中的另一个对象将对象数组分组

[英]How to group an array of objects by another object inside in javascript

我正在尝试创建一个函数,以将某个区域的排列元素分组,这将是原始数组。

一些细节:

数组中的某些元素没有区域。

如果没有相等的区域,则将其包括在内。

该区域不能重复,也就是说,如果元素没有包含元素的区域,并且元素有没有包含的区域,而该区域不重复。

这是数组的示例:

有些元素没有这样的区域:

{_id: "455", name: "ALBACETE"}

并且有带区域的元素:

{zone: {_id: "zone1", name: "zone1"}, _id: "143", name: "ALCALA"}
{zone: {_id: "zone1", name: "zone1"}, _id: "144", name: "OTRO"}
{zone: {_id: "zone2", name: "zone2"}, _id: "144", name: "OTRO MAS"}

对于此示例,需要的是以下结果:

{_id: "455", name: "ALBACETE"}
{zone: {_id: "zone1", name: "zone1"}, _id: "143", name: "ALCALA"}
{zone: {_id: "zone2", name: "zone2"}, _id: "144", name: "OTRO MAS"}

任何帮助表示赞赏!

这应该帮助不是最干净的代码,但是...

 const q = [
     { zone: { _id: "zone1", name: "zone1" }, _id: "143", name: "ALCALA" },
     { zone: { _id: "zone1", name: "zone1" }, _id: "144", name: "OTRO" },
     { zone: { _id: "zone2", name: "zone2" }, _id: "144", name: "OTRO MAS" },
     { _id: "455", name: "ALBACETE" }
 ];``


let ret = [];

let result = q.filter( x => {
  if(!ret.includes(x._id)) {
    ret.push(x._id);
    return true;
  }
  return false;
});

console.log (result);

输出将是

[ 
   { zone: { _id: 'zone1', name: 'zone1' }, _id: '143', name: 'ALCALA' },
   { zone: { _id: 'zone1', name: 'zone1' }, _id: '144', name: 'OTRO' },
   { _id: '455', name: 'ALBACETE' } 
]

根据您的要求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM