2016-06-05 9 views
-3
  • Was ist die beste Vorgehensweise dafür?
  • Was ist am leistungsfähigsten?
  • Wie kann dies mit den wenigsten Zeichen gelöst werden? (ohne ugifying vars)

Ich möchte natives oder lodash verwenden. inClass kann nicht zugewiesen sein, Yes oder No.Wert finden und ersetzen Best Practice

for (var i = 0; i < self.state.items.length; i++) { 
    var obj = self.state.items[i]; 
    if (_.result(obj, 'student_id') === _.result(row, 'student_id')) { 
    if (_.result(obj, 'inClass') === 'No') { 
     self.state.items[i].inClass = 'Yes'; 
    } else { 
     self.state.items[i].inClass = 'No'; 
    } 
    } 
} 
+2

* * „Was best practice dafür ist?“ - für * was *? Was ist das Problem, das Sie hier zu lösen versuchen? Sie erwähnen die Verwendung der wenigsten Zeichen: Ersetzen Sie das If/Else durch einen ternären Operator. – nnnnnn

+1

Ist 'inClass'' true' oder 'false' oder' "Yes" 'und' "No" '? –

+1

Warum verwenden Sie anstelle der Punktnotation die '_.result'-Methode? – undefined

Antwort

0

Dies ist eine weniger ausführliche Lösung, scheint die Verwendung von ._result() wie viel des Guten:

var items = self.state.items, 
    len = items.length, 
    i, obj; 

for (i = 0; i < len; i++) { 
    obj = items[i]; 
    if (obj.student_id === row.student_id) { 
     obj.inClass = obj.inClass === 'No' ? 'Yes' : 'No'; 
    } 
} 

In Bezug auf die „am wenigsten Zeichen“, es ist nicht wirklich etwas, das Sie sollten beunruhigend sein. Der Code sollte als eines der höchsten Probleme (im Allgemeinen) lesbar sein.

1

Vereinfachen mit forEach().

self.state.items.forEach(function(item){ 
    if (item.student_id === row.student_id) { 
     item.inClass = item.inClass === 'No' ? 'Yes' : 'No'; 
    } 
}); 

Für mich jeden kleinen Unterschied in der Leistung wird durch sauberere Offset Code sucht und ist nur dann wirklich kritisch auf große Datensätze

+0

Es ist mein Verständnis, dass 'forEach' ist viel weniger performant als eine Standard' for' Schleife –

+1

@KirkStrobeck siehe meine Kommentare dazu. OP fragte nach dem kürzesten Codeweg und fragte dann nach der Leistung ... nicht sicher, welche Priorität hat – charlietfl

+0

@KirkStrobeck Leistung weise Ich glaube, ein 'while' ist sogar besser als' for' – charlietfl