2016-12-18 2 views
0

Gibt es eine Möglichkeit, Daten zu destrukturieren?ES6 Strukturierungstermine

Ich weiß für Objekte, die Sie so etwas tun können.

var o = {p: 42, q: true}; 
var {p, q} = o; 

console.log(p); // 42 
console.log(q); // true 

Gibt es in ES6 eine bessere Möglichkeit, Folgendes zu tun? Gibt es dafür etwas wie Destrukturierung von Objekten?

function getFormattedDate(date) { 
    return `${date.getMonth() + 1}/${date.getDate()}/${date.getFullYear()}`; 
} 
+4

Wenn die Eigenschaften Funktionen und müssen genannt werden, ist Destrukturierung nicht wirklich eine Option. –

+0

Was genau stimmt nicht mit dem Code, den Sie bereits haben? –

+0

Sie sollten die Daten nicht selbst formatieren. Verwenden Sie stattdessen ['Intl.DateTimeFormat'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat) mit dem Gebietsschema 'en-US'. –

Antwort

1

Sie ein Objekt erstellen kann, die aus dem Date Objekt erbt, fügen Sie Getter für Monat, Tag und Jahr, und dann können Sie es destrukturiert. Obwohl es einige Gemeinkosten hat, könnte es sich lohnen, wenn Sie Daten oft verwenden. Darüber hinaus können Sie Dinge beheben, wie die Notwendigkeit, 1 zu Monat hinzuzufügen.

Obwohl Sie die Getter direkt mit dem Date Objekt hinzufügen, diese ist eine schlechte Praxis. Sie können mehr in diesem Thread - Why is extending native objects a bad practice?.

class EDate extends Date { 
 
    get month() { 
 
    return this.getMonth() + 1; 
 
    } 
 
    
 
    get day() { 
 
    return this.getDate(); 
 
    } 
 
    
 
    get year() { 
 
    return this.getFullYear(); 
 
    } 
 
} 
 

 
const getFormattedDate = ({ month, day, year }) => `${month}/${day}/${year}` 
 

 
console.log(getFormattedDate(new EDate())); 
 

 
// since Date can receive another Date as input, you can do this as well 
 

 
const date = new Date(); 
 

 
console.log(getFormattedDate(new EDate(date)));