我有两个阵列。一个是空白的,另一个是数据。我挑选随机候选人并将其粘贴到我的空白数组中。
由于我已经选择了这些候选人,我不希望他们的名字再次被选中,以及我不想在原始数组中放松他们的索引位置。为了避免再次选择,我设置name = undefined。现在发生的事情是我的重复数组也使用undefined更新。
如果您运行以下代码,在行下面切换并检查selectedcandidates数组,它将提供更好的信息。
candidates[candidateIndex[i]].name= undefined;
如何将元素复制到其他数组并更新原始数组,而不会影响复制的数组。提前感谢。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<button onclick="selectCandidate()">Click Here !!!</button> <script>
var selectedCandidate=[];
var candidates = [
{name:"Alpha",
age:"21"
},
{name:"Beta",
age:"21"
},
{name:"Gamma",
age:"21"
},
{name:"Albert",
age:"21"
},
{name:"Alaks",
age:"21"
},
{
age:"21"
},
{
age:"21"
}
];
function selectCandidate(){
var candidateIndex = [];
for(i =0; i<2; i++){
var randomnumber = generateRandomNumber();
if(candidateIndex.indexOf(randomnumber) && candidates[randomnumber].name != undefined){
candidateIndex.push(randomnumber);
}
else{
i--;
}
}
var selectthiscandidate;
for(i=0; i< 2; i++){
selectthiscandidate = candidates[candidateIndex[i]];
selectedCandidate.push(selectthiscandidate);
candidates[candidateIndex[i]].name= undefined;
}
console.log(selectedCandidate);
console.log(candidates);
}
function generateRandomNumber(){
return Math.floor((Math.random() * candidates.length-1) + 1);
}
</script>
</body>
</html>
答案 0 :(得分:0)
根据@MysterX指南更改了我的代码并且它有效。积分给@MysterX
for(i=0; i< 2; i++){
selectthiscandidate ={};
selectthiscandidate ={name:candidates[candidateIndex[i]].name,age:candidates[candidateIndex[i]].age}
selectedCandidate.push(selectthiscandidate);
candidates[candidateIndex[i]].name= undefined;
}
答案 1 :(得分:0)
以下代码完全从原始数组中删除对象(按&#34;运行代码段&#34;多次打印不同的结果):
var candidates = [{
name: "Alpha",
age: "21"
}, {
name: "Beta",
age: "21"
}, {
name: "Gamma",
age: "21"
}];
document.write('<p>"candidates" before selection:</p>');
print(candidates);
document.write('<p>Selection (returns a new array):</p>');
print(selectSome(candidates, 2));
document.write('<p>"candidates" after selection:</p>');
print(candidates);
function selectSome (source, n) {
var i = 0;
var total = source.length;
var selected = new Array(n);
while (i < n) {
selected[i++] = selectOne(
source, Math.floor(
Math.random() * total
)
);
}
return selected;
}
function selectOne (source, i) {
if (source[i] === null) {
// already selected, retry with i + 1
return selectOne(source, ++i % source.length);
}
else {
// candidate found, replace it with null and return it
return source.splice(i, 1, null)[0];
}
}
function print (o) {
document.write(
'<pre>' + JSON.stringify(o) + '</pre>'
);
}
&#13;