0

オブジェクトの JavaScript 配列を作成し、date.js を使用して日付を解析し、date.js 比較メソッドを使用してオブジェクトの配列を並べ替えようとしています。これは、2 つの問題を示すためにまとめたコードです。

問題 1: date.js が解析できない日付を無視して警告するにはどうすればよいですか? 問題 2: これらの日付でオブジェクトの配列を並べ替えるにはどうすればよいですか? (date.js の有無にかかわらず)

私の直感は、これはすべて間違っていて、もっと良い方法があることを教えてくれます。アイデア?

    <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>
4

1 に答える 1

0

ささいなことのカップル

var セクションで time と isoTime up を宣言することを検討してください。そうしないと、魔法のように表示され、スコープが定義されません。

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

一度だけ解析timedata[row]し、変数を再利用することを検討してください。コードを少しきれいにするかもしれません。

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

配列に入れているオブジェクトに日付を格納するだけでなく、文字列として isoTime が必要な理由はありますか? 日付も保存して、それを並べ替えに使用できると思います

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

また、mozilla docoを見ると、sort メソッドは新しい配列を返すのではなく、その場で配列に作用します。

myArrayOfObjects = myArrayOfObjects.sort(...
//should be just
myArrayOfObjects.sort(...
于 2012-07-29T03:11:32.660 に答える