簡體   English   中英

期望在過濾函數的箭頭函數array-callback-return結尾處返回一個值

[英]Expected to return a value at the end of arrow function array-callback-return on filter function

我正在使用React,我當前收到錯誤“預期在箭頭函數array-callback-return結束時返回一個值”。 我搜索了其他問題,但似乎找不到匹配min的(除非我完全失明)。 我有以下代碼。

 const self = this; const relevantCompanyMeasures = this.props.companyMeasures .filter(companyMeasure => { for(const measure of self.state.measures) { if(measure.id === companyMeasure.measure_type_id) return true; else return false; } }); 

代碼循環遍歷兩個對象數組,尋找兩者之間的匹配。 如果我只為匹配返回true,我會理解錯誤。 但是,如果沒有匹配,我會返回false。 結果,我很難看到如何在箭頭函數結束時沒有返回值的情況下結束。

這是因為return只退出for循環,而不是Array.prototype.filter()的整個回調。 相反,使用循環來檢查的companyMeasure.measure_type_id中存在self.state.measures ,你可以簡單地做一個陣圖 ,它返回所有的ID,然后核對該返回數組,如果存在ID使用Array.prototype.includes

const self = this;
const relevantCompanyMeasures = this.props.companyMeasures
  .filter(companyMeasure => {
    return self.state.measures.map(m => m.id).includes(companyMeasure.measure_type_id);
  });

更好的是:

  • 因為使用的是箭頭功能,詞匯this從封閉范圍內得以保留,所以你甚至不需要來代理this在所有
  • 您還可以在.filter()回調之外創建數組映射以減少開銷
  • 現在.filter()回調是一個單行,我們可以擺脫大括號並利用箭頭函數中的隱式返回

以下是最終代碼的外觀:

const ids = this.state.measures.map(m => m.id);
const relevantCompanyMeasures = this.props.companyMeasures
  .filter(companyMeasure => id.includes(companyMeasure.measure_type_id));

或者:

  1. 循環開始
  2. 你得到了第一個measure
  3. 條件是真的,你返回true
  4. 你永遠不會進入第二個measure

要么:

  1. 循環開始
  2. 你得到了第一個measure
  3. 條件為false,您返回false
  4. 你永遠不會進入第二個measure

擺脫else並將return false移動到循環之后 ,因此只有在到達循環結束時才會運行而不會找到匹配項。

 const self = this; const relevantCompanyMeasures = this.props.companyMeasures .filter(companyMeasure => { return self.state.measures.map(meas => meas.id).indexOf(companyMeasure.measure_type_id)!=-1 } ); 

嘗試這個

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM