2013-04-30 3 views
1

연관 배열 및 해당 길이 문제에 대해 자주 묻는 질문에 매우 익숙한 사운드 제목을 알고 있습니다. 그러나 아직 스택 오버플로 내 여기에 내 문제에 대한 해결책을 찾지 못했습니다.푸시를 적절하게 사용하여 배열 길이 문제

문제는 .length이 원하는 양 대신 항상 0을 출력한다는 것입니다.이 테스트 사례에서는 12가됩니다. console.log을 통해 출력 할 때 12 개의 항목이 표시되고 올바른 값으로 길이 속성을 볼 수 있습니다.

this.images.push(el.toDataURL());

것은 내가 지금 어떤 도움이 될 것 console.log(this,this.images,(this.images).length);는 항상 0 대신 12

의 전화 : 다음 코드는 배열을 채 웁니다

images: Array[12] 
    0: "img1.jpg" 
    1: "img2.jpg" 
    2: "img3.jpg" 
    3: "img4.jpg" 
    4: "img5.jpg" 
    5: "img6.jpg" 
    6: "img7.jpg" 
    7: "img8.jpg" 
    8: "img9.jpg" 
    9: "img10.jpg" 
    10: "img11.jpg" 
    11: "img12.jpg" 
    length: 12 
    __proto__: Array[0] 

: 내 불을 지르고 출력을 부착 고맙습니다.

바이올린의 스크립트입니다. (콘솔 출력)

http://jsfiddle.net/EL2xR/

+0

문제를 보여주기 위해 jsfiddle 데모를 만들 수 있습니까? – xdazz

+0

'this.images'가 어떻게 초기화됩니까? – giorgian

+0

this.images = []; jsfiddle을 추가했습니다. – Chris

답변

2

this.img.onload을 비동기로 설정하면 init이 실행되지만 getImages 메소드 직후에 해당 순간에 aImages가 비어 있음을 알게됩니다. 올바른 결과를 얻기 위해 getImages를 실행하기 전에 모든 이미지가로드되었는지 확인해야합니다.

다음은 작동하는 수정 된 예입니다. 필요한 경우 더 많이 조정할 수 있습니다! this.loaded가 하나 개의 플래그 나는 모든 것이로드되었는지 알고하는 데 사용, 코드에 표시되는 위치에 대한 http://jsfiddle.net/EL2xR/1/

interval = setTimeout(function() { 
       _this.getImages(from, to); 
      }, 1000); 

체크! 그런 다음 setTimeout을 사용하여로드 될 때까지 동일한 메소드를 실행하십시오!

+0

Omg ... 물론! - .- 네가 나를 수색하는 시간을 절약 한 것 같아 ^^ 고마워! – Chris

+0

편집 해 주셔서 감사합니다. 지금 콜백을 사용하여 문제를 해결했습니다.:) 어쨌든 나는 단지 부하 문제를 생각하지 않았다 : D – Chris

+0

당신이 반갑습니다. 기꺼이 도와 드리겠습니다! – Angel

0

아 - 난 당신이 무슨 뜻인지 참조하십시오.

그래서 문제는 비어있을 때 콘솔에 인쇄하지만 로그인 한 후에 배열 내용이 업데이트된다는 것입니다. - 당신이 aImages가 있다고 볼

var that = this; 
    setTimeout(function() { 
     console.log("Later..."); 
     console.log(that,that.aImages,that.aImages.length); 
    }); 

을 아마도 당신은 "이"하며 속성이 너무 스프라이트를 확장, 콘솔에 살고있다라는 것이다 혼란 :

확인하기 위해 초기 CONSOLE.LOG 후이 추가 가득 차 있었지만 처음 인쇄했을 때 비어있었습니다.

+0

배열이 동적으로 채워지고 배열에 새 값을 추가하기 위해 images.push()를 사용하고 있습니다. 이것은 this.images를 사용해야하는 객체의 일부이므로 다른 모든 것은 동일합니다. Images 배열은 []를 통해 정의됩니다. 어레이의 console.log를 통해 여전히 길이는 12가 표시되지만 this.images.length의 직접 출력은 0을 출력합니다. 문제를 보여주는 바이올린도 추가되었습니다. http://jsfiddle.net/EL2xR/ – Chris