Typescript - 根据多个值对数组中的对象进行分组和过滤

问题描述 投票:0回答:1

假设我们有像这样的数组:

[
  {
    id: 0,
    name: 'A'
    longitude: 10
    latitude: 12
  },
  {
    id: 1,
    name:'B'
    longitude: 10
    latitude: 12
  },
  {
    id: 2,
    name: 'C'
    longitude: 11
    latitude: 10
  },
  {
    id: 3,
    name: 'D'
    longitude: 11
    latitude: 15
  }
]

我想得到一个具有相同经度和纬度的对象数组,如:

[
  [
    {
      id: 0,
      name: 'A'
      longitude: 10
      latitude: 12
    },
    {
      id: 1,
      name:'B'
      longitude: 10
      latitude: 12
    }
  ]
]

想到的唯一方法是循环遍历数组以获取坐标和那里的对象数,然后如果长度大于1但是过程非常复杂,则为每个坐标获取子数组。我在redux react应用程序中使用它,这是在重新渲染之前每次状态更改后计算的。

有没有更有效的方法呢?我想把那些经度和纬度相同的人分组。

javascript reactjs typescript
1个回答
1
投票

您可以按longitudelatitude对数据进行排序。接下来,您需要遍历数据并将匹配的对象推送到临时数组,如下所示。最后,您可以返回临时数组。

const arr = [{
        id: 0,
        name: 'A',
        longitude: 10,
        latitude: 12,
    },

    {
        id: 2,
        name: 'C',
        longitude: 11,
        latitude: 10,
    },
    {
        id: 3,
        name: 'D',
        longitude: 11,
        latitude: 15,
    },
        {
        id: 1,
        name: 'B',
        longitude: 10,
        latitude: 12
    }
];

function cleanData(data) {
	data.sort(function (a, b) {
    return a.longitude - b.longitude  || a.latitude - b.latitude;
	});
    let tempArr = [];
    for (let i = data.length - 1; i >=1 ; i--) {
        if (data[i].hasOwnProperty('longitude')) {
                if (data[i].longitude === data[i - 1].longitude &&
                    data[i].latitude === data[i - 1].latitude) {
                    tempArr.push(data[i], data[i - 1]);
                }
                
            } else {
            	return;
            }
        
        }
        console.log([...[tempArr]]);
    }

cleanData(arr);
© www.soinside.com 2019 - 2024. All rights reserved.