2017-08-09 24 views
0

短陣推對象我有對象像檢查密鑰值在陣列對象存在與否,如果不存在內部陣列,並用相同的密鑰值

var array = [{x:'Thu Jul 27 2017 01:00:00 GMT+0200 (Central European Daylight Time)',y:1}, 
{x:'Thu Jul 27 2017 01:10:00 GMT+0200 (Central European Daylight Time)',y:5}, 
{x:'Thu Jul 27 2017 01:15:00 GMT+0200 (Central European Daylight Time)',y:3}, 
... 
{x:'Thu Jul 27 2017 23:55:00 GMT+0200 (Central European Daylight Time)',y:8}, 
]; 

陣列,其中我需要檢查每個間隔時間用5 minute.Suppose我的開始和結束時間是

var start = 'Thu Jul 27 2017 01:00:00 GMT+0200 (Central European Daylight Time)'; 
var end = 'Thu Jul 27 2017 23:55:00 GMT+0200 (Central European Daylight Time)'; 

如果任何間隔數據缺失然後,我需要推動該對象與給定的時間間隔爲鍵「x」和「Y」爲0意味着我的輸出必須看起來像這樣 -

var output= [{x:'Thu Jul 27 2017 01:00:00 GMT+0200 (Central European Daylight Time)',y:1}, 
{x:'Thu Jul 27 2017 01:05:00 GMT+0200 (Central European Daylight Time)',y:0}, 
{x:'Thu Jul 27 2017 01:10:00 GMT+0200 (Central European Daylight Time)',y:5}, 
{x:'Thu Jul 27 2017 01:15:00 GMT+0200 (Central European Daylight Time)',y:3}, 
... 
{x:'Thu Jul 27 2017 23:55:00 GMT+0200 (Central European Daylight Time)',y:8}, 
]; 

已添加丟失對象{x:'Thu Jul 27 2017 01:05:00 GMT + 0200(Central European Daylight Time)',y:0}。 我試過了。

var start = 'Thu Jul 27 2017 01:00:00 GMT+0200 (Central European Daylight Time)'; 
var end = 'Thu Jul 27 2017 23:55:00 GMT+0200 (Central European Daylight Time)'; 
var interval = 300000; 
//loop through every 5 minute interval 
for(var dt = start;dt<end;dt = new Date(dt.getTime()+ interval)){ 
    if(!lookup(dt , array)) { 
     array .push({ 
     x: dt, 
     y: 0 
     }); 
    } 
} 
console.log("Unsorted output is" + array);// result 

function lookup(name,arr) { 
    for(var i = 0, len = arr.length; i < len; i++) { 
    if(arr[ i ].key === name) 
     return true; 
    } 
    return false; 
} 

只要從我的邏輯我看,一切都很好,但我看不到缺失的時間間隔添加。任何人都可以幫助我,我做錯了什麼。 在此先感謝。

+0

的日期存儲爲日期或字符串? – baklazan

+0

@baklazan是日期。 –

回答

0

你爲什麼不嘗試轉換的對象爲的毫秒和比較這...

的代碼片段應該是一個有點簡單,給你什麼,我談論的要點。

在這個例子中,我創建了一個數組來保存每個日期對象的millisec值。循環實際的對象並使用getTime()方法即時將其轉換爲毫秒,儘管未經測試......這可能比一次推送轉換後的整數要慢。

唯一的挑戰就是排序,以及您是否需要排序的日期......使用此方法,只需將新值推入對象中即可。

注碼是UNTESTED - 它只是給予GENREAL IDEA

//create an array in tandem with your objects array that holds the millisec value 
 

 
var millisecArray = []; 
 

 
for(var i = 0; i < array.length; i++) { //loop through the existing date object array 
 
\t millisecArray.push(array[i]['x'].getTime()); //and push its millisec value into the new array 
 
} 
 

 
var start = startObj.getTime(); //gets the time in millisecs 
 
var end = endObj.getTime(); //gets the time in millisecs 
 
var interval = 300000; 
 
var newDateObj = new Date(); 
 

 
//loop through every 5 minute interval 
 
for(var current = start; current < end; current = current + interval;){ //keep looping until current is 5 minutes smaller than end 
 
    if(!lookup(current , millisecArray)) { 
 
     array.push({ 
 
     x: newDateObj.setTime(current), 
 
     y: 0 
 
     }); 
 
     millisecArray.push(current); 
 
    } 
 
} 
 

 
function lookup(name,arr) { 
 
    for(var j = 0; i < arr.length; j++) { 
 
    if(arr[ j ] === name) 
 
     return true; 
 
    } 
 
    return false; 
 
}

+0

我嘗試整天運行你的代碼,它真的很慢。 – Dev

+0

慢?你使用了多少次迭代? –