我需要在洗牌后删除重复项。目前结果是重复的。
示例:结果2,2,1,4,4,3,5,5,我需要为2,1,4,3,5
这是一个大数组
<script>
Array.prototype.shuffle = function() {
var input = this;
for (var i = input.length-1; i >=0; i--) {
var randomIndex = Math.floor(Math.random()*(i+1));
var itemAtIndex = input[randomIndex];
input[randomIndex] = input[i];
input[i] = itemAtIndex;
}
return input;
}
var tempArray = [
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
4,4,4,4,4,4,4,4,4,4,4,4,4,
5,5,5,5,5,
]
tempArray.shuffle();
document.write(tempArray);
</script>
答案 0 :(得分:3)
只需使用[1,2,3,4,5].shuffle()
,而不是使用那个大型数组。这样,你就不会得到重复。但是这里有一个函数可以给你一个独特的数组,即一个没有重复的数组:
function unique(arr) {
var result = [],
map = {};
for (var i = 0; i < arr.length; i++) {
var duplicate = map[arr[i]];
if (!duplicate) {
result.push(arr[i]);
map[arr[i]] = true;
}
}
return result;
}
然后,只需使用unique(tempArray.shuffle())
。
这是 DEMO 。
答案 1 :(得分:2)
function unique(b) {
for (var c = [], d = {}, a = 0; a < b.length; a++) {
d[b[a]] || (c.push(b[a]), d[b[a]] = !0);
}
return c;
}
unique( [1, 1, 1, 2, 2, 3] ); // [1, 2, 3]
答案 2 :(得分:1)
您可以使用以下方法,使用ES6语法:const unique = [...new Set(array)]
有关Set对象的更多信息: Mozilla - Set object
答案 3 :(得分:0)
如果你有权访问jQuery,你可以将进程分成两个数组,取出结果,循环遍历它,只有当它不在那里时才将它添加到newArray。这样他们就会以同样的顺序出现。
var someArray = [3,3,3,3,3,3,4,4,4,4,1,1,1,1,1,2,2];
function cleanArray(oldArray) {
var newArray = [];
for(i=0;i<oldArray.length;i++) {
if( $.inArray(oldArray[i], newArray) == -1 ) {
newArray.push(oldArray[i]);
}
}
return newArray;
}
document.write(cleanArray(someArray));
//result would be 3,4,1,2
编辑:我已经更新了这个功能,所以它的工作方式与我相信你想象的方式相同。这是一个有效的例子:http://jsfiddle.net/xe2F8/
另外,不要忘记链接到jquery:
<script src="http://code.jquery.com/jquery-latest.js"></script>
答案 4 :(得分:0)
从任何JavaScript数组中删除重复项的一种非常快捷的方法如下:
var listWithDuplicates = [1, 2, 2, 4, 3, 4, 5, 3, 1, 5];
console.log(listWithDuplicates.filter(function(element, index, array) {
// using lastIndexOf(...) retains the last
// repetition preserving the order of the array
return index === array.indexOf(element);
}));
//prints out: [1, 2, 4, 3, 5] - with indexOf variant
//prints out: [2, 4, 3, 1, 5] - with lastIndexOf variant
希望这对于从JavaScript数组中删除重复项的某些目的而言非常方便。
请分享有关此解决方案未解决的任何角落案例的反馈或任何改进此答案的建议。