2015-09-21 58 views
0

我可以優化我的代碼位以減少行數嗎?通過調用方法檢查數組中的單個元素

我正在檢查/傳遞單個數組元素?我能否以通用的方式重新編寫它?

for (var i = 0; i < $scope.studentReport.Students.length; i++) 
{ 
    if (_isValueNan($$scope.studentReport.Students[i].Age)) 
     $$scope.studentReport.Students[i].Age = null; 

    if (_isValueNan($$scope.studentReport.Students[i].Number)) 
     $$scope.studentReport.Students[i].Number = null; 

    if (_isValueNan($$scope.studentReport.Students[i].Height)) 
     $$scope.studentReport.Students[i].Height = null; 
} 


var _isValueNan = function (item) { 
    var result = false; 
    if (typeof item == 'number' && isNaN(item)) 
     result = true; 
    return result; 
} 

回答

1

您可以在函數內部取消屬性,也可以獨立傳遞項目和屬性值。例如:

for (var i = 0; i < $scope.studentReport.Students.length; i++) 
{ 
    _checkValueNan($$scope.studentReport.Students[i], "Age"); 
    _checkValueNan($$scope.studentReport.Students[i], "Number"); 
    _checkValueNan($$scope.studentReport.Students[i], "Height"); 
} 


var _checkValueNan = function (item, valueName) { 
    if (typeof item[valueName] == 'number' && isNaN(item[valueName])) 
     item[valueName] = null; 
} 

編輯: 從玉萍貢薩爾維斯答案領先的,你還可以檢查任何對象的屬性,這可能是一個更具擴展性的解決方案。

var _checkAllValueNan = function (item) { 
    for(var key in item) { // iterates all item properties 
     if (!item.hasOwnProperty(key)) continue; // ensures not prop of prototype 
     if (typeof item[key] == 'number' && isNaN(item[key])) item[key] = null; 
    } 
} 

for (var i = 0; i < $scope.studentReport.Students.length; i++) 
{ 
    _checkAllValueNan($scope.studentReport.Students[i]); 
} 
+0

感謝看起來不錯 – immirza

+0

它的工作原理很好。我只是做了小小的改變,即$ scope.studentReport.Students.ForEach(item){.............}它看起來比傳統的循環更好。 – immirza

3

隨着裁判Stumblor的回答是:

for (var i = 0; i < $scope.studentReport.Students.length; i++) { 
    _checkValueNan($$scope.studentReport.Students[i], ["Age", "Number", "Height"]); 
} 

var _checkValueNan = function (item, values) { 
    values.forEach(function (val) { 
     if (typeof item[val] === 'number' && isNaN(item[val])) item[val] = null; 
    }); 
} 
+0

感謝看起來不錯 – immirza

+0

甚至對於任何價值? '爲(var鍵在項目){...}'.. – Stumblor

+0

@ Stumblor,沒有得到你的上面的線..可以舉一個例子提及我的問題?請 – immirza

相關問題