it-swarm.com.de

Month Array in JavaScript Nicht hübsch

Wie kann ich es schöner machen?

var month = new Array();

month['01']='Jan';
month['02']='Feb';
month['03']='Mar';

usw. Es wäre schön, es so zu machen:

var months = new Array(['01','Jan'],['02','Feb'],['03','Mar']);

Zum Beispiel. sowieso, um es zu vereinfachen?

16
Oscar Godson

das sollte es tun ..

var months = {'01':'Jan', '02':'Feb'};
alert( months['01'] );
21

Für einen natürlicheren Ansatz versuchen Sie diesen kleinen Ausschnitt. Es funktioniert mit Date-Objekten und nur als reguläre Funktion:

'use strict';

(function(d){
    var mL = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
    var mS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec'];

    d.prototype.getLongMonth = d.getLongMonth = function getLongMonth (inMonth) {
        return gM.call(this, inMonth, mL);
    }

    d.prototype.getShortMonth = d.getShortMonth = function getShortMonth (inMonth) {
        return gM.call(this, inMonth, mS);
    }

    function gM(inMonth, arr){
        var m;

        if(this instanceof d){
            m = this.getMonth();
        }
        else if(typeof inMonth !== 'undefined') {
            m = parseInt(inMonth,10) - 1; // Subtract 1 to start January at zero
        }

        return arr[m];
    }
})(Date);

Sie können dies direkt kopieren und einfügen und dann wie folgt verwenden:

var today = new Date();
console.log(today.getLongMonth());
console.log(Date.getLongMonth(9));          // September
console.log(today.getShortMonth());
console.log(Date.getShortMonth('09'));      // Sept

Diese Technik bietet Flexibilität bei der Indexierung und beim Zugriff darauf. Wenn das Date-Objekt verwendet wird, wird es korrekt funktionieren, aber wenn es als Standalone-Funktion verwendet wird, werden die Monate in für Menschen lesbarem Format von 1-12 berücksichtigt.

Fiddle damit!

26
JimmyBoh

warum nicht:

var month = [
  'Jan', 
  'Feb', 
  // ...
  'Dec'];

Um den Monatsnamen von der Nummer zu erhalten, würden Sie Folgendes tun:

var monthNum = 2; // February
var monthShortName = month[monthNum-1];
5
Dagg Nabbit

Kurze dynamische Lösung:

Hier ist eine dynamische Lösung, für die es nicht erforderlich ist, ein Array von Monaten fest zu codieren:

const month = f=>Array.from(Array(12),(e,i)=>new Date(25e8*++i).toLocaleString('en-US',{month:f}));

Testfälle:

// Using Number Index:

month`long`[0];    // January
month`long`[1];    // February
month`long`[2];    // March

month`short`[0];   // Jan
month`short`[1];   // Feb
month`short`[2];   // Mar

month`narrow`[0];  // J
month`narrow`[1];  // F
month`narrow`[2];  // M

month`numeric`[0]; // 1
month`numeric`[1]; // 2
month`numeric`[2]; // 3

month`2-digit`[0]; // 01
month`2-digit`[1]; // 02
month`2-digit`[2]; // 03

// Using String Index:

let index_string = '01';

month`long`[index_string-1];    // January
month`short`[index_string-1];   // Jan
month`narrow`[index_string-1];  // J
month`numeric`[index_string-1]; // 1
month`2-digit`[index_string-1]; // 01
4
Grant Miller

Verwenden Sie kein Array, es sei denn, Sie verwenden echte numerische Indizes. Versuche dies:

var month = {
    '01': 'Jan',
    '02': 'Feb',
    // ...
    '12': 'Dec'
};

Persönlich würde ich diese Art von Logik in eine Funktion einschließen:

var monthNames = ['Jan', 'Feb', /* ... */ 'Dec'];
function getMonthName(n) {
    return monthNames(n - 1);
}

alert(getMonthName(1)); // 'Jan'

Auf diese Weise müssen Sie nie über die zugrunde liegende Datenstruktur nachdenken oder sich über eine spätere Änderung Gedanken machen.

0
harto

Hier ist ein sehr einfacher Ansatz, um den Namen des Monats zu erhalten:

<script>
function getMonth(month){
    month = month-1;
    var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];

    if(months[month] != null){
        return months[month];
    }else{
        throw "Invalid Month No";
    }
}

try{
    monthName = getMonth(8);
    alert("Month Is : " + monthName);
}catch(e){
    console.log(e);
}
</script> 
0
Sunny S.M