2016-02-17 50 views
3

如何修改此代碼,以便我可以獲取field.DependencyFieldEvaluated值,並在獲取此值後立即離開函數?獲取返回值並退出forEach在JavaScript中?

function discoverDependentFields(fields) { 
        fields.forEach(function (field) { 
         if (field.DependencyField) { 
          var foundFields = fields.filter(function (fieldToFind) { return fieldToFind.Name === field.DependencyField; }); 
          if (foundFields.length === 1) { 
           return field.DependencyFieldEvaluated = foundFields[0]; 

          } 
         } 
        }); 
       } 
+0

什麼錯誤上述功能? – egig

+0

爲什麼不使用'for'循環代替'forEach'函數? – tdragon

+2

你不能擺脫forEach(),嘗試使用'every'來代替http://stackoverflow.com/questions/6260756/how-to-stop-javascript-foreach – gurvinder372

回答

4

使用好老香草for循環:

function discoverDependentFields(fields) { 
    for (var fieldIndex = 0; fieldIndex < fields.length; fieldIndex ++) { 
    var field = fields[fieldIndex]; 

    if (field.DependencyField) { 
     var foundFields = fields.filter(function(fieldToFind) { 
     return fieldToFind.Name === field.DependencyField; 
     }); 
     if (foundFields.length === 1) { 
     return foundFields[0]; 
     } 
    } 
    } 
} 

好吧,如果你想留看中,再次使用filter

function discoverDependentFields(fields) { 
    return fields.filter(function(field) { 
    if (field.DependencyField) { 
     var foundFields = fields.filter(function(fieldToFind) { 
     return fieldToFind.Name === field.DependencyField; 
     }); 
     if (foundFields.length === 1) { 
     return foundFields[0]; 
     } 
    } 
    })[0]; 
} 
+0

此解決方案工作!謝謝:) – Maryam

0

使用return聲明您想要像下面這樣突出顯示的地方。

[1, 2, 3, 4, 5, 6].forEach(function(value){ 
    if(value > 2) return; 
    console.log(value) 
}); 
+0

在什麼方面打破。您爲forEach傳遞的回調針對每個數據項執行,因此不能有單個返回值。但是,如果您不想爲特定條件處理回調,則可以使用返回。如果你可以提供這個問題,而不是代碼,我想我可以提供幫助,但不知道如何:) –

+0

.forEach()回調中的return語句就像一個'continue',而不像'break '。但無論如何,如果你看問題中的代碼,你會看到OP已經試圖使用'return'。 – nnnnnn

1

,而不是fields.forEach的,你可以使用fields.map。這裏是一個例子:

var source=[1,2,3,4,5]; 
 

 
var destination=source.map(function(item){ 
 
if(item==3) 
 
    return 'OUTPUT'; 
 
}).filter(function(item){return item;})[0]; 
 

 
console.log(destination); // prints 'OUTPUT'