2016-06-20 118 views
0

我有兩個基本相同的函數 - 他們遍歷一些數組。 區別在於循環內部發生了什麼。如何優化代碼?

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 "" 
    }, 

什麼是正確的方式說只使一個功能,或使兩個繼承一些共同的代碼? 我看到一個解決方案,使它只是一個功能,並提供不同的參數:

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 "" 
}, 

但東西告訴我它的醜陋。什麼是正確的方法來做到這一點?

+2

'陣列[I] [字段名]'是錯誤的;它應該是'array [i] [fieldName]'。除此之外,沒關係。這是什麼參數。 – Xufox

+1

我認爲[代碼評論](http://codereview.stackexchange.com)是這個問題的一個更好的地方? – kiro112

+1

您是否需要與舊版瀏覽器兼容? –

回答

5

不是連接和截斷容易得多......

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

不太優雅的代碼,但它如何突出性能? – K3N

+1

@ K3N值得一讀〜https://ryanpcmcquen.org/javascript/2015/10/25/map-vs-foreach-vs-for.html – Phil

+0

我可以在IE 7中使用此代碼嗎? –

2

老同學:

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'));