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 に答える
0

jQueryにアクセスできる場合は、プロセスを2つの配列に分割し、その結果を取得してループし、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 配列から重複を削除する非常に簡単な方法の 1 つは、次のとおりです。

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 に答える