2017-01-15 4 views
0

enthalten sind Ich habe ein Objekt, das ich durch es Schlüssel durchführe und seinen ganzen Schlüssel in einem Array schiebe, ich muss jede Zeichenkette mit einem Anführungszeichen einschließen, Also zum Beispiel, wenn ich ein Objekt habe {"name": true, "Updated Date": false} Ich möchte ein Array von String als ['"Name"', '"Aktualisiertes Datum"'] erstellen. Der Grund für dieses Format besteht darin, den angular orderBy Filter mit mehreren Prädikaten zu erstellen Prädikat mit Raum dazwischen wie Aktualisiert DatumWie man Array von Zeichenketten mit jeder Zeichenkette erstellt, die mit einem einfachen Anführungszeichen (Javascript)

I

var myObj = {"name": true, "Updated Date": false} 
 

 
var myPredicates = []; 
 

 
for(var prop in myObj) { 
 
    myPredicates.push("'" + prop + "'"); 
 
} 
 

 
console.log(myPredicates);
folgenden Code versucht hatte,

tun, dass das Ergebnis ["'name'", "'Updated Date'"] sein wird, aber was will ich erreichen ist ['"name"', '"Updated Date"']

hier ist ein plunker Ich versuche predicate von filterObject

+1

Wenn es nur ein Objekt ist, denke ich Objekt. Schlüssel (myObj) würden Ihnen geben, was Sie wollen. –

+0

@PatrickEvans Ist myObj ein Array ... Hmm. – GantTheWanderer

Antwort

0

Fügen Sie dazu die entkam Anführungszeichen zu machen.

var myObj = {"name": true, "Updated Date": false} 
 

 
var myPredicates = []; 
 

 
for(var prop in myObj) { 
 
    myPredicates.push('"\'' + prop + '\'"'); 
 
} 
 

 
console.log(myPredicates[0]); 
 
console.log(myPredicates[1]);

+0

Dies wird ein weiteres Paar von "zu meinem String" ["" name "", "" Aktualisiertes Datum ""] 'hinzufügen, und es ist notwendig,' "Aktualisiertes Datum" 'mit einem Anführungszeichen wie' '"Aktualisiertes Datum" " –

+0

Es heißt Escaping Zeichen, in diesem Fall zitiert. Http://stackoverflow.com/questions/2004168/escape-quotes-in-javascript – GantTheWanderer

+0

Sorry Kumpel, aber ich habe immer noch nicht verstanden, die Beziehung des Links, die Sie zur Verfügung gestellt Dieses Problem, ich habe einen Plünderer zur Verfügung gestellt, wenn wir versuchen, die Lösung zu verwenden, die ich erstellt habe oder Sie vorschlagen oder Jhon, wird nicht funktionieren, der Grund für Beispiel für Sie Lösung ist, gibt es keine Eigenschaft in meinen Daten namens "" " "' sort funktioniert nicht wie erwartet, angular filter akzeptiert Array von Eigenschaftsnamen '[" name "," city "]' und es wird die Datenbank nach diesen beiden Eigenschaften sortieren, jetzt der Grund, warum wir die Zeichenketten umschließen müssen Einfaches Anführungszeichen ist der Abstand zwischen 'Aktualisiert' und 'Datum' für solche Eigenschaften ... –

0

Versuchen Sie folgendes: (Anmerkung ich nur ein Element drucken, weil console.log (Schlüssel) die Strings im Array-Format scheint anders aussehen

var myObj = {"name": true, "Updated Date": false} 
 

 
var keys = Object.keys(myObj); 
 

 
for(var i = 0; i < keys.length; i++) { 
 
    keys[i] = "'\"" + keys[i] + "\"'"; 
 
} 
 

 
console.log(keys[0]);
.

+0

gut es wird nicht helfen, da die Version in Array aussehen wie '[' '"name"' "," '"Aktualisiertes Datum"' "]] und wenn wir es auf dem Plunker versuchen, den ich zur Verfügung gestellt habe, um die Daten zu sortieren, ist das Sortierergebnis nicht korrekt, da das Ergebnis nicht wie erwartet –

1

Die Frage, die Sie hier stellen - was die anderen Antworten genommen haben Nennwert und gegeben vernünftige Antworten - ist nicht die Frage, die Sie zu fragen, basierend auf Ihrer tatsächlichen AngularJS-Code in Ihrem Plunkr. Hinzu kommt, dass, haben Sie ein paar Missverständnisse über JavaScript, die Sie weitere Verwirrung verursachen:

  1. Ob Sie einfache Anführungszeichen in doppelte Anführungszeichen oder doppelte Anführungszeichen in einfache Anführungszeichen spielt keine Rolle, haben.
  2. Wenn Sie eine Zeichenfolge an die Konsole in einem Browser ausdrucken verwendet immer Doppel Anführungszeichen (versuchen sowohl die Eingabe nur 'abc'Rückkehr und "abc" Rückkehr in Ihrer Konsole direkt, das zu sehen).

Um zu Ihrem eigentlichen Problem: anstatt diese ...

predicate=['"+name"','"-Updated Date"'] 

was AngularJS erfordert dies ...

predicate=['+"name"','-"Updated Date"'] 

Beachten Sie die Platzierung des Plus- und Minuszeichen habe sich geändert. (Wie Sie wahrscheinlich wissen, werden die Anführungszeichen nicht wirklich um name benötigt, da es keine eingebetteten Leerzeichen enthält, aber es tut nicht weh, sie dort zu haben, wie es Ihr Code tut.)

So Ihr plunkr Code, statt dies:

predicate.push("'-" + key + "'"); 

verwenden soll:

predicate.push("-'" + key + "'"); 
+0

Zustimmen, war es mein Missverständnis und ich denke alle Antworten sind richtig an ihrer Stelle, ich habe meinen Fehler gestern bemerkt und sogar meine eigene Frage zu eckigen 'orderBy' beantwortet http://stackoverflow.com/questions/41623608/angular-orderby-filter- Problem mit -predicate-array? noredirect = 1 # comment70448916_41623608 Wie Sie sagten, war meine '+' und '-'-Zeichenplatzierung falsch, aber nicht um Positionen zu zitieren –

0

Warum invertieren nicht nur doppelte Anführungszeichen " mit Apostroph '

var myObj = {"name": true, "Updated Date": false} 

    var myPredicates = []; 

    for(var prop in myObj) { 
     myPredicates.push('"' + prop + '"'); 
    } 


    for (var i=0; i<myPredicates.length; i++){ 
     console.log (myPredicates[i]) 
    } 

//"name" 
//"Updated Date" 
Verwandte Themen