2014-11-15 1 views
2

왜 모든 object.num이 1로 인쇄되는지 누가 알 수 있습니까? 이것은 나를 미치게합니다. 어떻게 든 for 루프 다음에 object.num = 1의 값이 무엇이든 관계없이 절대 값은 1로 설정되지 않더라도 전체 세그먼트를 복사하여 디버그하십시오.참고로 전달 하시겠습니까?

<script type="text/javascript"> 
window.addEventListener("load", main, false); 

const n = 4; 

function main() 
{ 
    var belt = new Array(4*n); 
    initArr(belt); 
    printIt(belt); 
    populateArr(belt); 
    printIt(belt); 
    reorder(belt); 
    printIt(belt); 
} 

function populateArr(arr) 
{ 
    var a = {name:"a", num:0}; 
    var b = {name:"b", num:0}; 
    var end = arr.length; 
    var i = end-1; 

    for(var temp = n; temp > 0; temp--) 
    { 
     a.num = temp; 
     arr[i] = a; 
     i-=2; 
    } 

    i = end-2; 
    for(var temp = n; temp > 0; temp--) 
    { 
     b.num = temp; 
     arr[i] = b; 
     i-=2; 
    } 

    return arr; 
} 

function printIt(arr) 
{ 
    var tempArr = new Array(arr.length); 
    for(var i=0; i < arr.length; i++) 
    { 
     tempArr[i] = arr[i].name + arr[i].num; 
    } 
    console.log(tempArr); 
} 

function initArr(arr) 
{ 
    var nothing = {name:null, num:0}; 
    for(var i=0; i<arr.length; i++) 
    { 
     arr[i] = nothing; 
    } 
    return arr; 
} 

function reorder(arr) 
{ 
    var nothing = {name:null, num:0}; 
    var counter = 0; 
    var aIndex = 0; 
    var bIndex = null; 
    for(var i=0; i < arr.length; i++) 
    { 
     if(arr[i].name === "b" && bIndex === null)//first b doesn't get moved 
     { 
      bIndex = i+1; 
     } 

     else if(arr[i].name === "a") 
     { 
      arr[aIndex] = arr[i]; 
      arr[i] = nothing; 
      counter++; 
      aIndex++; 
     } 
     else if(arr[i].name ==="b") 
     { 
      arr[bIndex] = arr[i]; 
      arr[i] = nothing; 
      counter++; 
      bIndex++; 
     } 
    } 
    console.log("count: " + counter); 
    console.log("n: " + n); 
    return arr; 
} 

</script> 

답변

1

어떻게 든 object.num의 루프에 대한 값 이후 = 1에 상관없이이 1

'예'로 설정하지 않더라도 무엇을, "그들은"입니다 - "그들은 "재사용"이 루프의 마지막 반복에서 1로 설정 : 1. temp

,174 때

for(var temp = n; temp > 0; temp--) 
{ 
    a.num = temp; 
    arr[i] = a; 
    i-=2; 
} 

그 루프의 마지막 반복이다

이제 실제로는 하나의 객체 만 얻었습니다. 배열의 모든 요소를 ​​해당 객체에 대한 참조로 설정하고 있습니다. 이것이 배열의 모든 값이 같은 것처럼 보이는 이유입니다. 다른 개체마다를 만들려면 사용해야

for(var temp = n; temp > 0; temp--) 
{ 
    arr[i] = { name: "a", num: temp }; 
    i -= 2; 
} 
+0

덕분에 내가 같은 문제가 그리고 나는 또한 내 Quetion의 대답을 찾을 수 있지만, 당신의 대답은 내가 정말 감사 다시 –

+0

덕분에 정말 큰 감사이기 때문에 빠른 응답. 오직 하나의 대상 만 참조되고 있다는 사실을 결코 잊을 수 없었습니다. –