javascript - 根据重复的字典属性将一维列表减少为锯齿状二维列表

标签 javascript arrays reduce

我有一个这样的字典列表,其中可能包含基于一些字典属性(并非所有属性)的重复项:

const data = [{
  name: 'v',
  latitude: '30.0',
  longitude: '25.0'
}, {
  name: 'w',
  latitude: '30.0',
  longitude: '25.0'
}, {
  name: 'x',
  latitude: '45.9',
  longitude: '50.2'
}, {
  name: 'y',
  latitude: '40.5',
  longitude: '85.7'
}, {
  name: 'z',
  latitude: '40.5',
  longitude: '85.7'
}];

这里,如果两个字典具有相同的经度和纬度,则它们被视为重复。

目标是减少这个一维列表,将一种类型的所有重复项分组到一个嵌套列表中。例如,如果我们有三个具有相同坐标的重复项,它们应该进入自己的嵌套列表,而另一个坐标的两个重复项则进入不同的嵌套列表。即使是没有重复项的独立坐标也应该进入其自己的嵌套列表。我们希望最终得到一个列表,其中每个项目都是代表唯一坐标的列表。

期望的输出:

[
  [
    {
      name: 'v',
      latitude: '30.0',
      longitude: '25.0'
     }, {
      name: 'w',
      latitude: '30.0',
      longitude: '25.0'
    }
  ], 
  [
    {
      name: 'x',
      latitude: '45.9',
      longitude: '50.2'
    }
  ],
  [
    {
      name: 'y',
      latitude: '40.5',
      longitude: '85.7'
    }, {
      name: 'z',
      latitude: '40.5',
      longitude: '85.7'
    }
  ]
];

编辑:更正了所需的输出,以便所有项目都是列表。

最佳答案

我首先将每个数据点放入一个对象中。我将使用坐标 (lat,lng) 作为键,它指向每个唯一坐标的数组。当您迭代数据点时,您可以将每个数据点添加到对象中各自的数组中。

然后迭代您刚刚创建的该对象的值。每个值都应该是一个数组。如果该数组的长度为 1,则可以仅将该对象添加到输出数组中,但如果它大于 1,则可以将整个数组添加到输出数组中。

瞧。

const data = [{
  name: 'v',
  latitude: '30.0',
  longitude: '25.0'
}, {
  name: 'w',
  latitude: '30.0',
  longitude: '25.0'
}, {
  name: 'x',
  latitude: '45.9',
  longitude: '50.2'
}, {
  name: 'y',
  latitude: '40.5',
  longitude: '85.7'
}, {
  name: 'z',
  latitude: '40.5',
  longitude: '85.7'
}];

let obj = {};
data.forEach(e => {
  let key = `${e.latitude},${e.longitude}`;
  if(obj[key] == undefined)
    obj[key] = [];
  obj[key].push(e);
});

let output = [];
Object.values(obj).forEach(e => {
  if(e.length == 1)
    output.push(e[0]);
  else
    output.push(e);
});

console.log(output);

关于javascript - 根据重复的字典属性将一维列表减少为锯齿状二维列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69170419/

相关文章:

python - 如何在 Python 中将二进制向量旋转到最小值

c++ - 模板类型定义的数组初始化

javascript - 使用 JQuery 更改多个图像

javascript - 最好的 JavaScript 图表库或者我们可以为 Raphael 条形图添加一个比例尺?

javascript - TypeScript:如何正确键入此树节点,以便它具有 size 属性或 Children 属性?

javascript 嵌套数组更新

map - 运行时异常 : java. lang.NoSuchMethodException : tfidf$Reduce. <init>()

javascript - 如何使用基于其他数组的特定动态键来过滤/减少对象数组

scala - 需要帮助找出 Scala 编译器错误

javascript - 如何从 Javascript 前端将值传递给经过训练的回归函数?