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

时间:2018-08-10 07:41:56

标签: javascript arrays

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

一些细节:

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

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

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

这是数组的示例:

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

{_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"}

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

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

 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' } 
]

根据您的要求。