复制和更新数组值更新原始数组值javascript

时间:2015-09-13 09:52:14

标签: javascript arrays copy

我有两个阵列。一个是空白的,另一个是数据。我挑选随机候选人并将其粘贴到我的空白数组中。

由于我已经选择了这些候选人,我不希望他们的名字再次被选中,以及我不想在原始数组中放松他们的索引位置。为了避免再次选择,我设置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>

2 个答案:

答案 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;多次打印不同的结果):

&#13;
&#13;
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;
&#13;
&#13;