如何创建具有最大元素的唯一键数组?

时间:2018-04-14 19:44:43

标签: javascript arrays node.js string split

我试图找出群组中的最大数字,并将它们分配到一组唯一的群组中。我尝试使用map和lodash uniq但没有帮助

  

实施例

让我们说主数组由一个typeid和一个由冒号(:)分隔的数字组成 我想从每个typeid中识别出最大的数字,然后用它们创建一个数组。

从下面的示例中,我尝试生成如下所示的输出

["abcdwidets:6564","nightly:6543"]

6564& 6543是各自群体中最大的值

  

代码

var mainarray = ["abcdwidets:1234","abcdwidets:3432","abcdwidets:6564","nightly:3423","nightly:6543"]
var arr = [];
var needle;
var i = 0;
var flag = 0;
mainarray.forEach( (element) => {
arr = element.split(":");
arr = arr.map((val) => {
return val
});

})

2 个答案:

答案 0 :(得分:2)

Reduce将数组放入Map,并获得每个key:之前的字符串)的最大数字。然后Array.map()地图的entries iterator(按spreading)返回数组:

const mainarray = ["abcdwidets:1234","abcdwidets:3432","abcdwidets:6564","nightly:3423","nightly:6543"];

const result = [...mainarray.reduce((r, s) => {
  const [k, v] = s.split(':');

  if(!r.has(k) || r.get(k) < v) r.set(k, v);

  return r;
}, new Map())]
.map(([k, v]) => `${k}:${v}`);

console.log(result);

答案 1 :(得分:0)

你需要将mainArray分成2个这样的数组

array = [
  {
    id,
    ...
    nested: [
      {
        id,
        ..
      },
      {
        id,
        ..
      }
    ]
  },
  ...
]

一旦你将主阵列拆分成这两个,那么你只需要进行冒泡排序并再将这两个变为1。