javascript - 从 javaScript 数组中提取具有相同值的项目组

标签 javascript arrays sorting

我有一个包含坐标的嵌套数组数组。我想根据它们是否具有相同的纬度来创建一个包含嵌套坐标数组的新数组。 描述可能有点困惑,所以这里有一些例子和代码

初始数组(纬度是数字对的第二个值)

const coordinateArray = [[46,11], [38,11], [44,9], [81,15], [55,15]];

预期结果:

const newArray = [
                  [[46,11],[38,11]],
                  [[81,15],[55,15]], 
                  [[44,9]]
                 ];

我试过了,但它返回一个新数组中的每个坐标,而不是将具有相同纬度的坐标配对:

const rowArrays = [];
coordinateArray.map(c => {
    const row = [c];
    for (let i = 0; i < coordinateArray.length; i++) {
      console.log(c[1], coordinateArray[i][1]);
      if (c[1] === [1]) {
        row.push(coordinateArray[i]);
        coordinateArray.splice(0, 1);
      }
    }
    return rowArrays.push(row);
  });

如有任何建议,将不胜感激

最佳答案

您的解决方案很接近,但正如您所提到的,它通过 coordinateArray 无条件地在每次迭代时创建一个新数组。因为您的输入到输出不是 1:1,而是您希望改变形状,所以 reducemap 更可取。

如果你reduce d 根据纬度将数组转换为对象,然后您可以使用 Object.values以达到您想要的形状。

const coordinateArray = [[46,11], [38,11], [44,9], [81,15], [55,15]];
const matched = coordinateArray.reduce((out,arr) => {
  out[arr[1]] = out[arr[1]] //Have we already seen this latitude?
    ? [arr, ...out[arr[1]]] //Yes: Add the current coordinates to that array
    : [arr];                //No: Start a new array with current coordinates
  return out;
  }, {});

//const matched looks like this:
//{
//  "9":  [[44,9]],
//  "11": [[38,11],[46,11]],
//  "15": [[55,15],[81,15]]
//}
  
console.log(Object.values(matched)); //We only care about the values

如果您喜欢简洁和/或与您的开发人员同事有意见,可以使用扩展运算符 (...) 将 reduce 转换为单个表达式) 和伪合并 (out[arr[1]] || [])。

const coordinateArray = [[46,11], [38,11], [44,9], [81,15], [55,15]];
const matched = coordinateArray.reduce((out,arr) => ({...out, [arr[1]]: [arr, ...(out[arr[1]] || [])]}), {});
console.log(Object.values(matched));

关于javascript - 从 javaScript 数组中提取具有相同值的项目组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58012766/

相关文章:

javascript - 文本区域未正确调整大小

javascript - 时刻时区 ("America/Los Angeles") 关闭 3 分钟

javascript - 将数组值绑定(bind)到 AngularJs 中的下拉列表

javascript - 在 HTML 组件旁边放置一个标签

c - 迭代复制多个字符

php - 如何从数组中删除不需要的值

java - Java 公共(public)元素搜索器中的错误

javascript - 根据属性是否存在对对象数组进行排序

java - 如何在 Java 中对包含挪威语字符的字符串进行排序?

c - c中的链表插入排序