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迭代器?
输出的顺序并不重要。它只需要将重复项分块成我想保留的单独数组。
您可以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)