2017-02-14 4 views
0

Ich schreibe function objectify(str), die eine Zeichenfolge, verwandelt es in ein Array und erstellt ein neues Objekt mit dem Schlüssel Wert Paare als Wort und Index des Arrays, z.JavaScript für Schleife druckt unerwarteten Iteratorwert

objectify('the cat sat on the mat') 

=> {die: 0, Katze: 1, sat: 2, auf: 3, mat: 4}

I die Funktion wie folgt geschrieben:

function objectify(str) { 
    var words = str.split(' '); 
    var object = {} 
    for (var i = 0; i < words.length; i++) { 
    object[words[i]] = i; 
    } 
    return object; 
} 

die gedruckt :

=> {die: 4, Katze: 1, sat: 2, auf: 3, mat: 5}

Q1. Was macht i in diesem Fall?

ich für die Ausgabe wissen möchte ich die Funktion wie so geschrieben werden muss:

function countWords(str) { 
    var words = str.split(' '); 
    var object = {} 
    for (var i = 0; i < words.length; i++) { 
    object[words[i]] = words.indexOf(words[i]); 
    } 
    return object; 
} 

Q2. Gibt es einen eleganteren Weg, dies zu tun?

Antwort

2

Das Problem ist, dass "der" in der Phrase zweimal erscheint, und Ihre Schleife arbeitet in aufsteigender Reihenfolge. Die zweite Instanz von "the" wird die the Eigenschaft auf den größeren Wert aktualisieren. Klingt so, als würdest du das nicht wollen. Stattdessen klingt es so, als ob der kleinere Wert Vorrang haben soll.

Sie haben zwei Möglichkeiten.

Tun Sie es rückwärts. Kleinere Werte haben Vorrang, da sie die größeren Werte überschreiben.

function objectify(str) { 
    var words = str.split(' '); 
    var object = {} 
    for (var i = words.length-1; i >=0; i--) { 
    object[words[i]] = i; 
    } 
    return object; 
} 

prüfen Existenz. Verhindern Sie, dass größere Werte kleinere Werte überschreiben, indem Sie sicherstellen, dass die Eigenschaft nicht bereits definiert ist.

function objectify(str) { 
    var words = str.split(' '); 
    var object = {} 
    for (var i = 0; i<words.length; i++) { 
    if (!object.hasOwnProperty(words[i])) { 
     object[words[i]] = i; 
    } 
    } 
    return object; 
} 
Verwandte Themen