随机化数组,拾取2个随机对象,并填充一个新数组?

时间:2014-07-28 17:19:36

标签: javascript arrays random

我有多个对象的数组,例如

var arr = ["a", "b", "c", "d"];

我想要的是从该数组中选取2个随机对象,例如“a”和“c”,并将2个对象推送到另一个数组,例如“arrCopy”。 另一件事是,我希望在数组“arrCopy”中有一个元素的副本,这些元素也被洗牌。因此,该数组应如下所示:

arrCopy = ["c", "a", "a", "c"];

最后一件事,如果他们的内容相同,我怎么比较呢?例如:

arrCopy[1] == arrCopy[2];

4 个答案:

答案 0 :(得分:1)

关于你的第一个问题:

var index1 = parseInt(Math.random() * arr.length, 10);
var index2 = index1;
while(index1 == index2) {
  index2 = parseInt(Math.random() * arr.length, 10)
}

var arrCopy = [arr[index1], arr[index2]]

你能否澄清你问题的第二部分,它听起来不像'另一件事是,我想拥有数组中元素的副本“arrCopy”'与你的例子匹配,因为你的例子有4元素而不是你从数组中选择的2。

修改

对于你的第二个问题,替换:

var arrCopy = [arr[index1], arr[index2]]

使用:

var arrCopy = [arr[index1], arr[index2], arr[index1], arr[index2]]

对于你的第三个问题:

arrCopy1 === arrCopy2将是浅层比较(它们是内存中的相同地址)

var areEqual = true;

for (var i = 0; i < arrCopy1.length; ++i) {
    if (arrCopy1 [i] !== arrCopy2[i]) {
        areEqual = false;
        break;
    }
}

然后检查areEual是否存在深度相等(数组内容是否相同)。

答案 1 :(得分:0)

使用任何随机化算法(例如:fisher yates算法).. http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle

随机化数组中的对象和

选择任何两个元素,例如

var firstElement = arr[Math.floor(Math.random()*arr.length)]
var secElement = arr[Math.floor(Math.random()*arr.length)]

答案 2 :(得分:0)

找到here的最简单方法。.Sort有助于以更短的方式执行此操作

[1,2,3,4,5,6].sort(function() {
  return .5 - Math.random();
});

答案 3 :(得分:0)

这应该可以解决问题:

function shuffle(array) {
  var currentIndex = array.length
    , temporaryValue
    , randomIndex
    ;

  // While there remain elements to shuffle...
  while (0 !== currentIndex) {

    // Pick a remaining element...
    randomIndex = Math.floor(Math.random() * currentIndex);
    currentIndex -= 1;

    // And swap it with the current element.
    temporaryValue = array[currentIndex];
    array[currentIndex] = array[randomIndex];
    array[randomIndex] = temporaryValue;
  }

  return array;
}

var arr = [{a:{count:3}}, {b:{count:2}}, {c:{count:3}}, {d:{count:4}}];

var num1,num2;
var shuffled_arr=shuffle(arr);
item1=arr[0];
item2=arr[1];

var arrCopy=shuffle([item1,item2,item1,item2]);

for(var i=0;i<arrCopy.length;i++){
    for(var g=i+1;g<arrCopy.length;g++){
        if(JSON.stringify(arrCopy[i])==JSON.stringify(arrCopy[g])){
            console.log('item in index ' + i +' is equal to item in index '+ g)
            console.log(arrCopy[i], arrCopy[g])
        }
    }    
}