javascript - 如何使用正则表达式对数组中的 Javascript 对象进行排序

标签 javascript arrays sorting object

我正在调用 API 并获取包含大量对象的数组。数组中有数百个对象,它的一小段看起来像这样:

[
    {
      "name": "total_kills_glock",
      "value": 70
    },
    {
      "name": "total_kills_mac10",
      "value": 39
    },
    {
      "name": "total_kills_ump45",
      "value": 136
    },
    {
      "name": "total_shots_glock",
      "value": 1262
    },
    {
      "name": "total_hits_glock",
      "value": 361
    }
    {
      "name": "total_shots_mac10",
      "value": 862
    },
    {
      "name": "total_hits_mac10",
      "value": 261
    },
    {
      "name": "total_shots_ump45",
      "value": 1610
    },
    {
      "name": "total_hits_ump45",
      "value": 598
    }
]

有没有办法使用正则表达式对数组进行排序,使其看起来像这样:

[
  {
    "name": "glock",
    "kills": 70,
    "shots": 1262,
    "hits": 361
  },
  {
    "name": "mac10",
    "kills": 39,
    "shots": 862,
    "hits": 261
  },
  {
    "name": "ump45",
    "kills": 136,
    "shots": 1610,
    "hits": 598
  }
]

最佳答案

这是一种方法,使用正则表达式从原始名称中提取名称和数据类型,然后基于此构建一个对象:

const raw = [{
    "name": "total_kills_glock",
    "value": 70
  },
  {
    "name": "total_kills_mac10",
    "value": 39
  },
  {
    "name": "total_kills_ump45",
    "value": 136
  },
  {
    "name": "total_shots_glock",
    "value": 1262
  },
  {
    "name": "total_hits_glock",
    "value": 361
  },
  {
    "name": "total_shots_mac10",
    "value": 862
  },
  {
    "name": "total_hits_mac10",
    "value": 261
  },
  {
    "name": "total_shots_ump45",
    "value": 1610
  },
  {
    "name": "total_hits_ump45",
    "value": 598
  }
];

var final = [];
var keys = [];
raw.forEach(v => {
  const m = v.name.match(/^total_([^_]+)_(.+)$/);
  const k = keys.indexOf(m[2]);
  if (k == -1) {
    var o = { name: m[2] };
    o[m[1]] = v.value;
    final.push(o);
    keys.push(m[2]);
  } else {
    final[k][m[1]] = v.value;
  }
});
console.log(final);

关于javascript - 如何使用正则表达式对数组中的 Javascript 对象进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58254040/

相关文章:

javascript - 网站上随机出现的按钮

javascript - 删除所有类元素

java - 按字符串或索引的一部分对字符串数组进行排序?

c++ - 如何找到 int[] 的大小?

php - 按键显示数组顺序的最佳方式

javascript - 基于名称属性的对象数组排序错误

javascript - 从服务器加载 svg 并将其显示到 html 元素中

javascript - 如何隐藏一个 div 并在悬停图像或文本上隐藏另一个?

c++ - 删除动态数组c++时出错

java - 按 String[] 中存在的名称按升序对 HashMap<String[], Boolean> 进行排序