Javascript-将数组项(包括它们的重复项)放入新数组中

raz*_*tax 2 javascript arrays lodash

我在SO上找不到这个特定问题的答案

假设我有一个字符串数组,或者在这种情况下是数字:

var x = [1, 1, 1, 2, 3, 3, 5, 3, 3, 5, 4, 5];
Run Code Online (Sandbox Code Playgroud)

我希望输出为:

var output = [[1,1,1], [2], [3,3,3,3,3], [4], [5, 5, 5]];
Run Code Online (Sandbox Code Playgroud)

我希望使用Lodash,但是大多数东西都倾向于删除重复项,而是将它们分块在一起放入自己的数组中。也许某种.map迭代器?

输出的顺序并不重要。它只需要将重复项分块成我想保留的单独数组。

Edd*_*die 5

您可以reduce用来将数组元素分组为一个对象。使用Object.values对象转换为数组。

var x = [1, 1, 1, 2, 3, 3, 5, 3, 3, 5, 4, 5];
var result = Object.values(x.reduce((c, v) => {
  (c[v] = c[v] || []).push(v);
  return c;
}, {}));

console.log(result);
Run Code Online (Sandbox Code Playgroud)

较短的版本:

var x = [1, 1, 1, 2, 3, 3, 5, 3, 3, 5, 4, 5];
var result = Object.values(x.reduce((c, v) => ((c[v] = c[v] || []).push(v), c), {}));

console.log(result);
Run Code Online (Sandbox Code Playgroud)

  • 我的天啊。哈哈哈 我需要更多咖啡 (4认同)
  • 他们不是从一个平面数组开始并试图获得一个非平面数组吗? (3认同)