1

以下は、ループ内の配列から月を抽出する関数です。月が見つかると、その月はオブジェクト CRIMES_PER_MONTH で 1 ずつ繰り返されます。

これは機能しますが、非常に醜い解決策であり、switch ステートメントが非常に長くなります。では、switch ステートメントの代わりに何を使用できますか?

var crimes_per_month = {
          january: 0,
          february: 0,
          mars: 0,
          april: 0,
          may: 0,
          june: 0,
          july: 0,
          august: 0,
          september: 0,
          oktober: 0,
          november: 0,
          december: 0
};

function AddToMonths(month) {

    switch(month) {

        case 1:
            jan += 1;
        break;

        case 2:
            feb += 1;
        break;

        case 3:
            mar += 1;
        break;

        case 4:
            apr += 1;
        break;

        ... and so on...

    }
}

for(var i = 0; i < incidents.length; i++) {
    month = incidents[i].substring(5, 7);
    AddToMonths(parseInt(month));
}

ループ内でオブジェクトに直接アクセスするのが最善だと思います。

for(var i = 0; i < incidents.length; i++) {
    month = incidents[i].substring(5, 7);
    crimes_per_month[month] += 1;
}

...しかし、これは配列に対してのみ機能します。これをオブジェクトとして保持したいのです。

4

5 に答える 5

4

crimes_per_month指定されたキーでプロパティを直接アドレス指定できるように、配列を作成するのが最も簡単addToMonthsです。

crimes_per_month = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
function addToMonths(month) {
    crimes_per_month[month-1] += 1;
}

それを望まない場合は、インデックスから月名への変換関数を作成する必要があります。

var crimes_per_month = {
    january: 0,
    february: 0,
    mars: 0,
    april: 0,
    may: 0,
    june: 0,
    july: 0,
    august: 0,
    september: 0,
    oktober: 0,
    november: 0,
    december: 0
};

function addToMonths(month) {
    var names = ["january", "february", "mars", "april", "may", "june", "july", "august", "september", "oktober", "november", "december"];
    var name = names[month-1];
    crimes_per_month[name] += 1;
}
于 2013-02-18T09:34:08.200 に答える
2

単純に配列を使用できます。

var crime_per_month = new Array(13);
for(var i = 1; i <= 12; i++) crime_per_month[i] = 0;
function AddToMonths(month) {
    crime_per_month[month]++;
}
于 2013-02-18T09:32:47.787 に答える
2

現在のCRIMES_PER_MONTH構造を維持したい場合は、キーを含む配列を使用して、月番号をキー名に変換できます。

var addToMonths = (function () {
    var names = ["january", "february", "mars", "april", "may", "june", "july", "august", "september", "oktober", "november", "december"];
    return function (month) {
        CRIMES_PER_MONTH[names[month - 1]]++;
    };
}());
于 2013-02-18T09:39:34.180 に答える
0

あなたが検索する月の名前の配列を持っているだけです。

var months = ["january", "february", ...],
    month = incidents[i].substring(...),

    incident_month = months[month-1]; // case 1: === "january"

 crimes_per_month[incident_month] += 1; // case 1: === crimes_per_month.january += 1
于 2013-02-18T09:46:14.997 に答える
0

ここで明らかに何かを見逃しましたか?

これは JavaScript なので、(ほぼ) すべてが許可されます ;)

オブジェクトメンバーにアクセスしてみませんか? crimes_per_monthandで同じメンバー名が必要になり、次のincidents_monthようなことができるはずです。

var crimes_per_month = {january: 0,...};
var incidents_month = {january: 14,....};

function addToMonth(/* string */ monthName) {
  crimes_per_month[monthName] = crimes_per_month[monthName] + 1;
}
于 2013-02-18T10:00:04.010 に答える