对数组进行排序,嵌套所有非唯一值

Mar*_*ons 5 javascript arrays

我对 javascript 很陌生,我试图构建这个我在挑战中发现的函数。我已经设法解决了这个问题,但我觉得这是一种非常复杂的做事方式,这里最快的方法是什么?

基本上answer(array)应该改变这个:

const array = [1,2,4,591,392,391,2,5,10,2,1,1,1,20,20];
Run Code Online (Sandbox Code Playgroud)

进入这个:

newArray = [[1,1,1,1],[2,2,2], 4,5,10,[20,20], 391, 392,591];
Run Code Online (Sandbox Code Playgroud)

到目前为止,这是我的代码:

const array = [1,2,4,591,392,391,2,5,10,2,1,1,1,20,20];
Run Code Online (Sandbox Code Playgroud)

重复函数来自这篇关于查找重复值的帖子

jns*_*jns 5

看看这个单线。猜猜这就是你需要的。

请注意,这不是解决此问题的最有效方法 - 但猜测它是美丽的!

const array = [1,2,4,591,392,391,2,5,10,2,1,1,1,20,20];
const newArray = [...new Set(array)].sort((a, b) => a-b).map(e => new Array(array.filter( i => i === e).length).fill(e)).map(e => e.length === 1 ? e[0] : e);
console.log(newArray);
Run Code Online (Sandbox Code Playgroud)


这是如何工作的:

  1. 我们正在从具有唯一值的数组中创建一个集合 [...new Set(array)]
  2. 我们正在对集合的键进行排序 .sort((a, b) => a-b)
  3. 我们循环遍历每个值并计算该值在数组中的出现次数 .map(e => new Array(array.filter( i => i === e).length);
  4. 在最后一步中,我们用值的数量和上面的集合中的值填充新数组 .fill(e)
  5. 我们正在迭代数组,如果只有一个值存在,则使条目平坦 .map(e => e.length === 1 ? e[0] : e)