我有一个包含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;
答案 0 :(得分:1)
您可以使用哈希表作为集合的子数组的引用。
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;
答案 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);
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);