2016-07-20 8 views
-2

Ich mag ein JSON-Objekt erstellen, die in alphabetischer Reihenfolge ist wie folgt gegliedert:JSON-Objekt und Arrays

var Dictionary = {}; 
 
var AlphabetString = "abcdefghijklmnopqrstuvwxyz"; 
 
for (x in AlphabetString) { 
 
    Dictionary[x] = new Array(); 
 
} 
 
var TestingString = ["apples, bannans, carrots, dice"]; 
 
for (x in TestingString) { 
 
    Dictionary[TestingString.charAt(0)].push(TestingString); 
 
}

Damit bei jedem Alphabet Wörterbuch wird mir ein Array von Strings geben, die haben gleicher Anfangsbuchstabe wie der Bezeichner, dh in meinem Beispiel Wörterbuch ["a"] = ["Äpfel"]. Ist das der richtige Weg?

+1

Verwenden 'for (var x von ...)' statt 'in' und es wird funktionieren. – Bergi

+2

Es gibt kein "JSON-Objekt". – gcampbell

+0

Verwenden Sie ** ** ** ** nicht für Strings und Arrays. Verwenden Sie entweder eine 'for ... of' oder eine richtige for-Schleife. – ndugger

Antwort

0

Sie können es auch tun, mit Array-Methoden

var AlphabetString = "abcdefghijklmnopqrstuvwxyz"; 
var Dictionary = AlphabetString.split('').reduce((res, curr) =>{ 
    res[curr] = [] 
    return res 
}, {}) 

var TestingString = "apples, bannans, carrots, dice"; 
res = TestingString.split(/, /).forEach(item => Dictionary[item[0].toLowerCase()].push(item)) 
1

You shouldn't use for...in loops to iterate array-like objects like arrays or strings.

Und TestingString sollte ein Array von Wörtern sein.

würde ich so etwas wie dieses verwenden (möglicherweise überprüfen, ob firstChar die leere Zeichenkette ist):

var dictionary = Object.create(null); 
 
var testingArray = ["apples", "bannans", "carrots", "dice", "abc"]; 
 
for (var i=0; i<testingArray.length; ++i) { 
 
    var firstChar = testingArray[i].charAt(0); 
 
    if(!(firstChar in dictionary)) dictionary[firstChar] = []; 
 
    dictionary[firstChar].push(testingArray[i]); 
 
} 
 
console.log(dictionary);

In ES6 Sie mit for...of laufen kann.

0

Wie verwiesen here, for in ist eine schlechte Idee hier. Aber falls du dich noch daran klammern willst, kannst du es machen.

var Dictionary = {}, 
 
    elem, index; 
 
var AlphabetString = "abcdefghijklmnopqrstuvwxyz"; 
 
var TestingString = ["apples", "bannans", "carrots", "dice"]; 
 
for (x in TestingString) { 
 
    elem = TestingString[x]; 
 
    index = elem.charAt(0); 
 
if (!Dictionary[index]) { 
 
    Dictionary[AlphabetString[x]] = []; 
 
} 
 
Dictionary[index].push(elem); 
 
} 
 

 
console.dir(Dictionary);