4

次の変数があります ( console.log(response)):

"['2013-04-15', 26]", "['2013-04-16', 10]", "['2013-04-17', 51]", "['2013-04-18', 46]", "['2013-04-19', 32]", "['2013-04-20', 50]", "['2013-04-21', 26]", "['2013-04-22', 31]", "['2013-04-23', 48]", "['2013-04-24', 821]", "['2013-04-25', 917]", "['2013-04-26', 949]", "['2013-04-27', 405]", "['2013-04-28', 593]", "['2013-04-29', 925]", "['2013-04-30', 877]", "['2013-05-01', 277]", "['2013-05-02', 112]", "['2013-05-03', 115]", "['2013-05-04', 62]", "['2013-05-05', 74]", "['2013-05-06', 76]", "['2013-05-07', 51]", "['2013-05-08', 93]", "['2013-05-09', 231]", "['2013-05-10', 350]", "['2013-05-11', 258]", "['2013-05-12', 0]", "['2013-05-13', 61]"

これを次の方法で配列の配列に変換します。

var json = response.replace(/"/g,'');
json = "[" + json + "]";
json = json.replace(/'/g,'"');
var myData = JSON.parse(json);

そして私は( )を受け取りますconsole.log(myData)

myData = [Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2], Array[2]]

さらに使用するために、この形式で保持する必要があります。回答を曜日でソートできるか知りたいです。また、たとえば月曜日のみ、火曜日のみを別の変数に格納することもできますか? これにはJQueryを使用する必要がありますが、私のニーズに合った機能でもありますか?

4

3 に答える 3

4

カスタムソーター関数をパラメーターとして渡すメソッドを使用できsort()ます (以下を参照)。
各配列の最初の要素 (例: "2013-04-15") に対応する日付の曜日を取得するには、Date のgetDay()関数を使用できます。

var sorter = function(a, b) {
    /* The '.replace("-", "/")' part is for compatibility with Safari
       See also http://stackoverflow.com/questions/4310953/invalid-date-in-safari */
    var d1 = new Date(a[0].replace("-", "/")).getDay();
    var d2 = new Date(b[0].replace("-", "/")).getDay();
    return d1 - d2;
};
myData.sort(sorter);

:
getDay()日曜日から土曜日までの曜日に対応する 0 から 6 までの整数を返します (日曜日は 0、月曜日は 1...)。

並べ替えではなく曜日ごとに分類したい場合は、次のようなものを使用できます。

function classifyByDayOfWeek(customArr) {
    var byDayOfWeek = [[], [], [], [], [], [], []];
    for (var i = 0; i < customArr.length; i++) {
        var day = new Date(customArr[i][0]).getDay();
        byDayOfWeek[day].push(customArr[i]);
    };
    return byDayOfWeek;
}
myData = classifyByDayOfWeek(myData);

この短いデモも参照してください。

于 2013-05-15T13:23:33.117 に答える
2

sortVisioN が提案した関数を使用して、独自の比較戦略を渡すことができます。このようなものがうまくいくはずです:

myData.sort(function(a,b)
{
  if ((a[0]>b[0]) && (a[1]>b[1])) return 1
  if ((a[0]==b[0]) && (a[1]==b[1])) return 0
  if ((a[0]<b[0]) && (a[1]<b[1])) return -1
});

ソートの詳細: http://www.w3schools.com/jsref/jsref_sort.asp

私の「戦略オブジェクト」コメントに関して、ここにいくつかの詳細情報があります:http://en.wikipedia.org/wiki/Strategy_pattern

于 2013-05-15T13:16:44.907 に答える