2013-08-19 66 views
0

我有下一個結構的一個JSON對象:爲什麼這個長的return語句在Javascript中不起作用?

{ 
    "matters": [ 
     { 
      "title": "Systems", 
      "date": "23/08/2010", 
      "score": 5 
     }, 
     .... 
    ] 
} 

我想排序與sort()功能這個數據。我可以通過使用score字段來完成,但我無法使用date字段進行排序。這是我目前使用:

$.getJSON('js/data.json', function(data) { 
    // data now contains one node with all the matters 
    $.each(data, function(key, val) { 
     // val now contains one matter per nodes 
     val.sort(function (a,b) { 
      return 
      parseInt(a.date.substring(6,10)+a.date.substring(3,5)+a.date.substring(0,2)) - 
      parseInt(b.date.substring(6,10)+b.date.substring(3,5)+b.date.substring(0,2)); 
     }); 
     // Here I get the same array not sorted! 
    } 
}); 

兩個parseInt()函數返回與此格式的整數:我用警報檢查,如果我分裂的日期正確

if date=="23/08/2010" => 20100823 

,它是罰款。無論如何,我無法排列數組。

我使用this JSON文件測試代碼。

我在做什麼錯?

+0

您可以發佈兩個日期的例子那種不正確的?或者數組根本就沒有排序? –

+2

適合我:http://jsfiddle.net/nEPTt/ –

+0

@CrazyTrain你是對的。它在那裏完美地工作。如何可能我在我的* localhost *上有完全相同的代碼,並且它不工作?! – Lucio

回答

0

如果你看看我的代碼越近,你會注意到return有斷線,都是parseInt()功能。

有錯誤。該函數沒有返回正確的值。解決方案是刪除所有的brecklines,並將所有return陳述保留在一行

錯誤代碼:

return 
parseInt(a.date.substring(6,10)+a.date.substring(3,5)+a.date.substring(0,2)) - 
parseInt(b.date.substring(6,10)+b.date.substring(3,5)+b.date.substring(0,2)); 

代碼工作:

return parseInt(a.date.substring(6,10)+a.date.substring(3,5)+a.date.substring(0,2)) - parseInt(b.date.substring(6,10)+b.date.substring(3,5)+b.date.substring(0,2)); 
0

下面是我如何實現排序的示例。我沒有使用你的JSON文件,但它應該是可能爲您的想法:

var data = { 
    "matters": [{ 
     "title": "Sistema de Procesamiento de Datos", 
      "date": "03/08/2011", 
      "score": 8 
    }, { 
     "title": "Programación I", 
      "date": "30/07/2010", 
      "score": 7 
    }, { 
     "title": "Elementos de Investigación Operativa", 
      "date": "07/08/2003", 
      "score": 10 
    }, { 
     "title": "Programación III", 
      "date": "05/08/2009", 
      "score": 10 
    }, { 
     "title": "Laboratorio de Computación III", 
      "date": "05/08/2010", 
      "score": 10 
    }] 
}; 

$.each(data, function(key, val) { 

    val.sort(function (a, b) { 
     function date_to_int(d) { 
      var parts = d.split('/'); 
      var day = parts[0]; 
      var month = parts[1]; 
      var year = parts[2]; 
      day = (day.length < 2) ? '0' + day : day; 
      month = (month.length < 2) ? '0' + month : month; 
      year = (year.length < 3) ? '20' + year : year; 
      return year + month + day; 
     } 
     return date_to_int(a.date) - date_to_int(b.date); 
    }); 
}); 

console.log(data); 

的jsfiddle可以在這裏找到:http://jsfiddle.net/bjarkehs/TJNE6/2/

+1

對不起,我誤讀了結果。但最終你沒有做任何與OP大不相同的事情。你只是重構了代碼。 –

+0

的確如此。然而,我無法從他寫的內容中解讀他的問題。我想,也許他在排序表現上出現了一些問題。我看到你對你如何建議處理比較的評論,我非常喜歡這個想法。我認爲這個問題可能只是加載JSON文件。 –

相關問題