2012-07-25 18 views
0

我試圖合併2個Date對象數組,但不要以體面的方式。這是我的noob解決方案:如何在JavaScript中使用jQuery(如果可能的話)將2個日期數組合並在一起?

$old = [new Date('2012-08-01'), new Date('2012-08-02'), new Date('2012-08-03')]; 
$new = [new Date('2012-08-01'), new Date('2012-08-06')]; 

$old2 = $.map($old, function(el, idx) { 
    for (var i in $new) 
    { 
     if ($new[i].getTime() == el.getTime()) return null; 
    } 
    return el; 
}); 

$new2 = $.map($new, function(el, idx) { 
    for (var i in $old) 
    { 
     if ($old[i].getTime() == el.getTime()) return null; 
    } 
    return el; 
}); 

$final = $.merge($old2, $new2); 

這樣的作品,但它似乎有點nooby,我猜測也是? 我做的另一個嘗試是這樣的:

for (var i in $new) 
{ 
    var found = false; 

    for (var j in $old) 
    { 
     if ($old[j].getTime() == $new[i].getTime()) 
     { 
     found = true; 
     $old = $old.splice(j, 1); 
     } 
    } 

    if (found) 
    { 
     $new = $new.splice(i, 1); 
    } 
} 

$final = $.merge($old, $new); 

但是這根本不起作用。如何正確和高效地完成它?

+0

請勿項中使用數組上的循環 – Bergi 2012-07-25 11:23:50

+0

即使對於典型的循環,我也無法得到它。檢測到匹配,但拼接似乎失敗。 – Tino 2012-07-25 16:10:51

+0

[如何在Javascript中合併兩個數組]的可能重複(http://stackoverflow.com/questions/1584370/how-to-merge-two-arrays-in-javascript)或[最簡單的方法來查找重複值JavaScript數組](http://stackoverflow.com/q/840781/1048572) – Bergi 2012-07-25 16:17:14

回答

3

這應該工作,假設你要命令他們:

$old = [new Date('2012-08-01'), new Date('2012-08-02'), new Date('2012-08-03')]; 
$new = [new Date('2012-08-01'), new Date('2012-08-06')]; 

var second = $old.concat($new); 
var sorted_second = second.sort(); // You can define the comparing function here. 
         // JS by default uses a crappy string compare. 
var results = []; 
for (var i = 0; i < second.length - 1; i++) { 
    if (sorted_second[i + 1] != sorted_second[i]) { 
     results.push(sorted_second[i]); 
    } 
}  

一些這個代碼是從here拍攝,以防萬一你需要更多的深入到分揀

+0

在日期對象上排序失敗。這就是爲什麼這個解決方案不起作用。我仍在調查,並希望任何可能改善或解決我的問題的建議。 – Tino 2012-07-25 16:14:00

相關問題