0

我需要在洗牌后删除重复的内容。目前结果出现重复。

示例:结果 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>
4

5 回答 5

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()).

这是一个演示

于 2012-08-28T19:32:02.880 回答
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]
于 2012-08-28T19:48:44.693 回答
1

您可以使用以下方法,使用 ES6 语法:const unique = [...new Set(array)]

有关 Set 对象的更多信息: Mozilla - Set 对象

于 2017-11-09T08:22:10.433 回答
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>
于 2012-08-28T19:52:08.313 回答
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 数组中删除重复项相关的某些目的会派上用场。

请分享有关此解决方案未解决的任何极端情况的反馈或改进此答案的任何建议。

于 2017-11-09T06:44:32.273 回答