2016-04-01 3 views
-3

Gibt es eine JS-Bibliothek, die mir die Typen jedes Attributs in einer Sammlung angibt?Wie kann ich den "Typ" jedes Attributs in einer Sammlung ermitteln?

Ich habe ein Array von Objekten, die das Ergebnis einer SQL-DB-Abfrage ist.

Die Daten sieht wie folgt aus:

[{ 
    id: "1", 
    email: "[email protected]", 
    is_subscribed: null, 
    name: "Don P", 
    created_at: "2015-01-18 18:16:32" 
}, 
{ 
    id: "2", 
    email: "[email protected]", 
    is_subsribed: "t", 
    name: "Test Guy", 
    created_at: "2015-01-30 12:05:55" 
}, 
...] 

ich ein Objekt möchte, dass mich die Typen jeder „Spalte“ erzählt. Etwas wie folgt aus:

{ 
    id: "integer", 
    email: "string", 
    is_subscribed: "boolean", 
    name: "string", 
    created_at: "datetime" 
} 

bearbeiten: Dies ist nicht so einfach, wie typechecks tun. Die Hauptprobleme, die ich hier habe, ist, dass alle Werte Strings mit Ausnahme von Nullen sind. Das heißt, ich müsste versuchen, eine ganze Spalte in einen Typ zu schreiben, und dann prüfen, ob dieser Typ eine Ganzzahl ist. Wiederholen Sie für jeden Typ, den ich überprüfen möchte. Also habe ich (Anzahl der zu testenden Typen) X (Anzahl der Objekte) X (Anzahl der Spalten), was viel zu berechnen ist. Wenn es also etwas klüger ist, würde ich es gerne machen.

Bearbeiten 2: Wenn Sie eine Frage downvote, hinterlassen Sie bitte einen Kommentar, warum der Autor so die Frage verbessern kann. Auch wenn etwas für dich offensichtlich ist, mag es nicht für den Autor sein (in diesem Fall ... ich: P).

+0

'typeof null! == Boolean' und .... – Rayon

+0

In diesem Beispiel sieht jeder Wert wie string (in Anführungszeichen) mit Ausnahme von 'null' aus. – AKS

+0

@rayon - Es ist nicht so einfach, sie kommen alle als Strings (siehe Beispiel) außer den Nullen. Außerdem können wir nur JS-Typen für Integer, Boolean, Float und String verwenden. Für Datumsangaben müssten wir versuchen, Datum für jeden zu einer Datetime analysieren zu lassen und zu sehen, ob es funktioniert. –

Antwort

1

hier ist ein kurzes Beispiel JSON.parse und typeof mit Typen zu identifizieren:

var o={ 
    id: "1", 
    email: "[email protected]", 
    is_subscribed: null, 
    name: "Don P", 
    created_at: "2015-01-18 18:16:32" 
}; 
for(var it in o){ var v=o[it]; 
    try{v=JSON.parse(v);}catch(y){} //try to turn strings into literals 
    if(!+v && Date.parse(v)){ v="date"; }else{ v=typeof v;} // find date strings (json encoded), not numbers 
    if(v=="object" && Array.isArray(o[it])) v="array"; // [] vs {} 
    if(v=="object" && !o[it]) v="null"; // null is and Object (doh!) 
    o[it]=v; 
} 

o;/* ~== { 
    "id": "number", 
    "email": "string", 
    "is_subscribed": "null", 
    "name": "string", 
    "created_at": "date" 
};*/ 

es zu einem Beispiel für die Ausgabe ziemlich nah dran ist, aber JS Typen anstelle von SQL-Typen verwenden, die JS von JSON nicht wirklich bestimmen kann, da JSON macht spezifische Nummerntypen wie int mehrdeutig.

Verwandte Themen