2017-02-23 4 views
1

日付を組み合わせてカウントしたい。すべての日付はUTCのタイムゾーンにあります。まず、toLocaleDateString()を使用してすべてのUTC時刻を現地時間に変換し、その日付をJSONオブジェクトのキーとして作成しますが、結果を期待通りに取得しません。jsonで同じ日付または複製を結合してカウントする

マイJSONフォーマット:

[{"UploadTimeStamp":"2017-02-18T09:01:43.060Z"}, 
{"UploadTimeStamp":"2017-02-19T04:09:43.347Z"}, 
{"UploadTimeStamp":"2017-02-21T14:38:40.157Z"}, 
{"UploadTimeStamp":"2017-02-22T11:30:58.546Z"}, 
{"UploadTimeStamp":"2017-02-22T11:31:35.514Z"}, 
{"DoneTimeStamp":"2017-02-19T03:54:34.791Z"}, 
{"DoneTimeStamp":"2017-02-19T17:48:40.041Z"}, 
{"DoneTimeStamp":"2017-02-21T14:55:33.335Z"}, 
{"DoneTimeStamp":"2017-02-17T15:01:32.426Z"}] 

結果:

{"18/02/2017":{"Upload":1}, 
"19/02/2017":{"Upload":1}, 
"21/02/2017":{"Upload":1}, 
"22/02/2017":{"Upload":"[object Object]1","Done":"[object Object]1"}, 
"17/02/2017":{"Done":1}} 

マイコード:

for (var i = 0; i < result.length; i++) { 

       if (result[i].UploadTimeStamp) { 

        var value = new Date(result[i].UploadTimeStamp).toLocaleDateString(); 
        //increment counter for this value (starting at 1) 
        var count = (temp[value] || 0) + 1; 

        if (temp[value] === undefined) { 

         temp[value] = {} 
         temp[value].Upload = count; 

        } 
        else { 

         temp[value].Upload = count; 

        } 
       } 
       else { 

        var value = new Date(result[i].DoneTimeStamp).toLocaleDateString(); 
        //increment counter for this value (starting at 1) 
        var count = (temp[value] || 0) + 1; 

        if (temp[value] === undefined) { 

         temp[value] = {} 
         temp[value].Done = count; 

        } 
        else { 

         temp[value].Done = count; 

        }  
       } 

      } 

      console.log(JSON.stringify(temp)) 

私の期待される結果

{"18/02/2017":{"Upload":1,"Done":0}, 
"19/02/2017":{"Upload":1,"Done":2}, 
"21/02/2017":{"Upload":1,"Done":1}, 
"22/02/2017":{"Upload":1,"Done":1}, 
"17/02/2017":{"Done":1,"Upload":0}} 

は事前

答えて

2

var data = [{"UploadTimeStamp":"2017-02-18T09:01:43.060Z"}, 
 
{"UploadTimeStamp":"2017-02-19T04:09:43.347Z"}, 
 
{"UploadTimeStamp":"2017-02-21T14:38:40.157Z"}, 
 
{"UploadTimeStamp":"2017-02-22T11:30:58.546Z"}, 
 
{"UploadTimeStamp":"2017-02-22T11:31:35.514Z"}, 
 
{"DoneTimeStamp":"2017-02-19T03:54:34.791Z"}, 
 
{"DoneTimeStamp":"2017-02-19T17:48:40.041Z"}, 
 
{"DoneTimeStamp":"2017-02-21T14:55:33.335Z"}, 
 
{"DoneTimeStamp":"2017-02-17T15:01:32.426Z"}]; 
 
var tmp = {}; 
 

 
data.forEach(function(d){ 
 
    let key = Object.keys(d)[0];  
 
    let value = new Date(d[key]).toLocaleDateString(); 
 
    key === "UploadTimeStamp" ? key = "upload": key = "done"; 
 
    tmp[value] = tmp[value] || {}; 
 
    tmp[value].upload = tmp[value].upload || 0; 
 
    tmp[value].done = tmp[value].done || 0; 
 
    tmp[value][key] += 1; 
 
}); 
 

 
console.log(tmp);

+0

は、私が行って追加したい、そんなにありがとう= 0特定の日付と万力詩22/02/2017" にdoneTimeStampを発見していない場合は:{ 『アップロード』:2、 『完了』 :0}、 "17/02/2017":{"完了":1、 "アップロード":0} – Beginner

+0

@Beginner Answer updated – Weedoze

+0

tmp [値] .done = tmp [値] .done || 0; in "IF BLOCK"とtmp [value] .upload = tmp [value] .upload || 0;それは正しいですか?私の問題を解決しました。 – Beginner

2

の.doneまたは.Uploadが定義されていない場合はチェックしていなかったでいただきありがとうございますが、その日のために全体のオブジェクト。 var countを設定する行を確認してください。あなたのコードが動作している

var result = [{"UploadTimeStamp":"2017-02-18T09:01:43.060Z"}, 
{"UploadTimeStamp":"2017-02-19T04:09:43.347Z"}, 
{"UploadTimeStamp":"2017-02-21T14:38:40.157Z"}, 
{"UploadTimeStamp":"2017-02-22T11:30:58.546Z"}, 
{"UploadTimeStamp":"2017-02-22T11:31:35.514Z"}, 
{"DoneTimeStamp":"2017-02-19T03:54:34.791Z"}, 
{"DoneTimeStamp":"2017-02-19T17:48:40.041Z"}, 
{"DoneTimeStamp":"2017-02-21T14:55:33.335Z"}, 
{"DoneTimeStamp":"2017-02-17T15:01:32.426Z"}]; 

var temp = {} 
for (var i = 0; i < result.length; i++) { 

       if (result[i].UploadTimeStamp) { 
        var value = new Date(result[i].UploadTimeStamp).toLocaleDateString(); 
        //increment counter for this value (starting at 1) 
        var count = ((temp[value] && temp[value].Upload)? temp[value].Upload: 0) + 1; 

        if (temp[value] === undefined) { 

         temp[value] = {} 
         temp[value].Upload = count; 

        } 
        else { 

         temp[value].Upload = count; 

        } 
       } 
       else { 

        var value = new Date(result[i].DoneTimeStamp).toLocaleDateString(); 
        //increment counter for this value (starting at 1) 
        var count = ((temp[value] && temp[value].Done)? temp[value].Done: 0) + 1; 

        if (temp[value] === undefined) { 

         temp[value] = {} 
         temp[value].Done = count; 

        } 
        else { 

         temp[value].Done = count; 

        }  
       } 

      } 

      console.log(JSON.stringify(temp)) 
+0

ありがとう@ tomek550 – Beginner

関連する問題