我有多个对象的数组,例如
var arr = ["a", "b", "c", "d"];
我想要的是从该数组中选取2个随机对象,例如“a”和“c”,并将2个对象推送到另一个数组,例如“arrCopy”。 另一件事是,我希望在数组“arrCopy”中有一个元素的副本,这些元素也被洗牌。因此,该数组应如下所示:
arrCopy = ["c", "a", "a", "c"];
最后一件事,如果他们的内容相同,我怎么比较呢?例如:
arrCopy[1] == arrCopy[2];
答案 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])
}
}
}