2016-06-11 131 views
0

內內退出我有這樣的方法:我怎樣才能徹底從.forEach這是一個功能

wordFormDirty =(): boolean => { 
    var self = this; 
    angular.forEach(self.word.wordForms, function (wf, key) { 
     var wordFormNgForm = 'wordFormNgForm_' + wf.wordFormId 
     if (!self[wordFormNgForm].$pristine) { 
      return true; 
     } 
    }); 
    return false; 
}; 

從我看到這永遠不會返回true。有人可以給我一些建議,告訴我如何實現這一點,這樣一個不純正的表單將使wordFormDirty()方法返回true。

+0

內部函數返回true,我想你想要外部函數返回true?只需使用普通的'for'循環。 – Jonathan

+0

嘗試使用'some'並看看。 – bhansa

+0

http://stackoverflow.com/questions/13843972/angular-js-break-foreach – bhansa

回答

1

你可以試試這個,在這種情況下,如果我的已瞭解的問題,第一時間有一個值,真正的結果設置爲true,否則它仍然假

wordFormDirty =(): boolean => { 
    var self = this; 
    var result = false; 
    angular.forEach(self.word.wordForms, function (wf, key) { 
     var wordFormNgForm = 'wordFormNgForm_' + wf.wordFormId 
     if (!self[wordFormNgForm].$pristine) { 
      result = true; 
     } 

    }); 
    return result; 
}; 
1

如果您希望直接從步行Array得到結果,請考慮使用除forEach之外的其他方法。例如:

return Object.values(this.word.wordForms).some(
    ({ wordFormId }) => !this[`wordFormNgForm_${wordFormId}`].$pristine 
); 
+0

我非常喜歡這個想法,但是你能解釋一下你的例子中Object.values是什麼意思,以及它如何用於我的方法? –

+0

我在ES7中編寫了我的代碼示例。如果您的環境不支持某些功能,您可以對它們進行填充或查找其他選項,例如使用Lodash中的''_some'](https://lodash.com/docs#some)。或者,如果'wordForms'已經是'Array',則可以直接使用'.some'。 – hon2a