在javascript中为重复元素创建新数组

时间:2016-12-02 12:51:17

标签: javascript arrays split

我有一个包含8个元素的JavaScript数组,有些元素在重复。我想为相同的元素创建单独的数组。

示例: 原始数组是[1,1,1,3,3,1,2,2] 结果数组将是[1,1,1,1],[3,3],[2,2]

我想要一个与此类似的功能:



var array=[1,1,1,3,3,1,2,2];



var createNewArrays=function(array){
     for (var i = 0; i < array.length; i++) {
        for (var j = 0; j < array.length; j++) {

        }
    }
   
};
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:1)

您可以使用哈希表作为集合的子数组的引用。

&#13;
&#13;
var array = [1, 1, 1, 3, 3, 1, 2, 2],
    result = [];

array.forEach(function (a) {
    a in this || result.push(this[a] = []);
    this[a].push(a);
}, Object.create(null));

console.log(result);
&#13;
&#13;
&#13;

答案 1 :(得分:1)

var arr = [1,1,1,3,3,1,2,2];

var hash = Object.create(null);

var result = arr.reduce(function(r, n) {
  if(!hash[n]) {
    hash[n] = [];
    r.push(hash[n]);
  }
  
  hash[n].push(n);
  
  return r;
}, []);

console.log(result);

使用Mapspread的ES6解决方案:

const arr = [1,1,1,3,3,1,2,2];

const result = [...arr.reduce((r, n) =>
  r.set(n, (r.get(n) || []).concat(n)),
new Map()).values()];

console.log(result);

答案 2 :(得分:0)

假设您希望生成的数组是由它们所代表的值键入的对象的属性。您只需遍历数组,在对象属性中创建或添加数组:

var array=[1,1,1,3,3,1,2,2];
var result = {};
array.forEach(function(entry) {
  (result[entry] = result[entry] || []).push(entry);
});
console.log(result);

这有点密集,这是一个更清晰的版本:

var array=[1,1,1,3,3,1,2,2];
var result = {};
array.forEach(function(entry) {
  var subarray = result[entry];
  if (!subarray) {
    subarray = result[entry] = [];
  }
  subarray.push(entry);
});
console.log(result);