2017-08-15 107 views
0

例如数组:我有数组,看起来像这样:创建副本的js

let arr = [{ 
    name: "Peter" 
}, { 
    name: "Peter" 
}, { 
    name: "John" 
}, { 
    name: "Peter" 
}, { 
    name: "Sarah" 
}, { 
    name: "John" 
}] 

我需要创建数组,这将是这个样子:

let dupArray = [ 
    [{ 
     name: "Peter" 
    }, { 
     name: "Peter" 
    }, { 
     name: "Peter" 
    }], 
    [{ 
     name: "John" 
    }, { 
     name: "John" 
    }], 
    [{ 
     name: "Sarah" 
    }] 
] 

再次,它不约重复,它约创建新的阵列与重复组合

+0

所以要明确,要创建一个名为“dupArray”包含分组的名称重复第2个阵列一起?不算数,只是分组?有了这个确切的数据?你到目前为止获得了哪些代码? –

+1

@ sascha10000这不是关于复制一个数组,它是关于在数组中创建重复数组 – George

+0

尝试'dupArray = arr.sort();'它按字母顺序对它进行排序,从而将重复数据组合在一起。 – Deckerz

回答

2

减少他们的地图和获取值():

let arr = [{ 
 
    name: "Peter" 
 
}, { 
 
    name: "Peter" 
 
}, { 
 
    name: "John" 
 
}, { 
 
    name: "Peter" 
 
}, { 
 
    name: "Sarah" 
 
}, { 
 
    name: "John" 
 
}]; 
 

 
let dupArr = 
 
    [...arr.reduce((a,b) => 
 
     a.set(b.name , (a.get(b.name) || []).concat(b)), 
 
    new Map()).values()]; 
 

 
console.log(dupArr);

+0

谢谢,那就是我需要的。我对JS很陌生,这三个点的“... arr”是什么意思? – jusinejo

+0

@jusinejo [spread语法](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator),它将一个迭代器转换为一个数组 – baao

0

var arr = [{name: "Peter"},{name: "Peter"},{name: "John"},{name: "Peter"},{name: "Sarah"},{name: "John"}] 
 

 
    var group = function(ar){ 
 
     // counts the element per group 
 
     var swap = {}; 
 
     for(a of ar){ 
 
      if(swap[a.name] !== undefined){ 
 
       swap[a.name] = swap[a.name] + 1; 
 
      } 
 
      else { 
 
       swap[a.name] = 1; 
 
      } 
 
     } 
 

 
     // here you could sort alphabetically 
 

 
     // creates your wanted format 
 
     var target = []; 
 
     for(s in swap){ 
 
      var len = swap[s]; 
 
      var subArray = []; 
 
      for(var i = 0; i < len; i++){ 
 
       subArray.push({ "name" : s }); 
 
      } 
 
      target.push(subArray); 
 
     } 
 

 
     return target; 
 
    } 
 

 
    document.getElementById("content").innerHTML = JSON.stringify(group(arr));
<pre id="content"></pre>

在组函数整个事情将通过计算进行分组的第一部分。之后你的愿望将会产生。根据交换数组内的计数,只需将{“name”:}添加到数组中(命名是任意的)。