2016-06-20 16 views
0

Ich habe zwei Funktionen, die im Grunde die gleichen sind - sie iterieren über einige Array. Der Unterschied ist, was in der Schleife passiert.Wie kann ich den Code optimieren?

func1: function() { 
     var result = ""; 
     for (var i = 0; i < array1.length; i++) { 
      result = result + array1[i].field1 + ', '; 

     } 
     if (result.length > 0) { 
      return result.substring(0, result.length - 2); 
     } else return "" 
    }, 

    func2: function() { 
     var result = ""; 
     for (var i = 0; i < array2.length; i++) { 
      result = result + array2[i].field2 + ', '; 

     } 
     if (result.length > 0) { 
      return result.substring(0, result.length - 2); 
     } else return "" 
    }, 

Was ist die richtige Art zu sagen, machen Sie es nur eine Funktion, oder um beide gemeinsamen Code zu erben? Ich sehe eine Lösung für sie nur eine Funktion zu machen und verschiedene Parameter zur Verfügung stellen:

func: function (array, fieldName) { 
    var result = ""; 
    for (var i = 0; i < array.length; i++) { 
     result = result + array[i].[fieldName] + ', '; 
    } 
    if (result.length > 0) { 
     return result.substring(0, result.length - 2); 
    } else return "" 
}, 

Aber etwas sagt mir, es ist hässlich. Was ist der richtige Weg?

+2

'array [i] [Feldname]' einfach falsch ist; es sollte 'array [i] [fieldName]' sein. Ansonsten ist es in Ordnung. Dafür gibt es Parameter. – Xufox

+1

ich denke, die [code review] (http://codereview.stackexchange.com) ist ein besserer Ort für diese Frage? – kiro112

+1

Benötigen Sie Kompatibilität mit älteren Browsern? –

Antwort

5

Viel einfacher, als verketten und Kürzen ...

func: function(array, fieldName) { 
    return array.map(a => a[fieldName]).join(', '); 
} 
+1

Weniger und eleganter Code, aber wie steht es leistungsmäßig? – K3N

+1

@ K3N eine Lektüre wert ~ https://ryanpcmcquen.org/javascript/2015/10/25/map-vs-forefore-vs-for.html – Phil

+0

Kann ich diesen Code in IE 7 verwenden? –

2

Alte Schule.

function pluckAndJoin(arr, attr) { 
    var i, 
     len = arr.length, 
     res = []; 
    for(i=0; i<len; i++){ 
     res.push(arr[i][attr]); 
    } 
    return res.join(', '); 
} 

console.log(pluckAndJoin([{name:'Hello'}, {name:'World'}], 'name'));