2012-07-29 3 views
0

저는 date.js를 사용하여 날짜를 파싱 한 다음 date.js 메소드를 사용하여 해당 객체를 정렬하는 자바 스크립트 객체 배열을 작성하려고합니다. 다음은 두 가지 문제점을 설명하기 위해 정리 한 코드입니다.javascript date.js 파싱 및 객체 배열 정렬

문제 1 : date.js에서 구문 분석 할 수없는 날짜를 어떻게 무시하고 경고합니까? 문제 2 : 해당 날짜별로 개체 배열을 정렬하려면 어떻게합니까? (date.js 포함 또는 제외)

내 직감은 내가이 모든 것을 잘못하고 더 나은 방법이 있다고 말해줍니다. 아이디어?

은 리셀러 (VAR) 섹션에서 시간과 isotime을을 선언 고려 작은 것들의

<script type="text/javascript" src="depend/date.js"></script> 

<script type="text/javascript"> 
var timedata = ["tomorrow", "today", "next thursday", "2012-08-02T04:00:00.000Z"]; // test data 
var myArrayOfObjects = []; 

//Iterate through the timedata array 
for(var row = 0; row < timedata.length; row++){  
    var cleanrow = true; 

    // Here is the first problem, on the 2012-08-02T04:00:00.000Z string can't be parsed (Date.parse(timestr) returns 0) 
    // even though it was previously created with .toISOString method below as a test 
    // Error: Ignoring row 3, could not parse this date: 2012-08-02T04:00:00.000Z 
    if (Date.parse(timedata[row])){ 
     time = Date.parse(timedata[row]); 
     isoTime = time.toISOString(); 
    }else{ 
     console.log("Ignoring row " + row + ", could not parse this date: " + timedata[row]); 
     cleanrow = false; 
    } 
    var xdata = "dummytestdata"; 
    var weight = "dummytestdata"; 
    if(cleanrow) { 
     myArrayOfObjects.push({x: xdata, xytime: isoTime, weight: weight}); 
    } 
} 

// Here is the second problem. 
// Error: TypeError: Date.parse(a.xytime) is null 
myArrayOfObjects = myArrayOfObjects.sort(function(a,b){ return Date.parse(a.xytime).compareTo(Date.parse(b.xytime)); }); 

// Show that the objects are sorted by dates 
for(var row = 0; row < myArrayOfObjects.length; row++) { 
    console.log(myArrayOfObjects[row].xytime); 
} 
</script> 

답변

0

커플, 그렇지 않으면 그들은 단지 마술 나타나고 범위 지정은 정의되어 있지 않습니다.

var cleanrow = true, isoTime = null, time = null; 

timedata[row]을 한 번만 구문 분석하고 변수를 다시 사용하는 것을 고려하십시오. 코드를 약간 정리할 수도 있습니다.

time = Date.parse(timedata[row]) 
if (time){ 
    isoTime = time.toISOString(); 

당신은 문자열보다는 당신이 배열에두고있는 객체의 날짜를 저장하기로 isotime을 필요 어떤 이유가 있습니까? 당신은 단지뿐만 아니라 날짜를 저장하고 mozilla doco보고 정렬 또한

myArrayOfObjects.push({x: xdata, xytime: isoTime, weight: weight, realTime: time}); 
//... 
myArrayOfObjects = myArrayOfObjects.sort(function(a,b){ return a.realTime.compareTo(b.realTime); }); 

에 그것을 사용할 수있는 저를 친다, 정렬 방법은 오히려 새로운 배열을 반환하는 것보다, 장소에 배열에 역할을합니다.

myArrayOfObjects = myArrayOfObjects.sort(... 
//should be just 
myArrayOfObjects.sort(...