2017-02-24 80 views
0

我使用數據填充表格 - 使用fixed-data-table,這是一個React.js組件。但是,在現階段這並不重要。Javascript:Uncaught TypeError:無法讀取屬性'indexOf'null

表中有問題源於的搜索框。

首先,這裏是代碼的有趣部分。

for (var index = 0; index < size; index++) { 
      if (!filterBy || filterBy == undefined) { 
       filteredIndexes.push(index); 
      } 
      else { 

       var backendInfo = this._dataList[index]; 

       var userListMap = hostInfo.userList; 

       var userListArr = Object.values(userListMap); 


       function checkUsers(){ 
        for (var key in userListArr) { 
         if (userListArr.hasOwnProperty(key) && userListArr[key].text.toLowerCase().indexOf(filterBy) !== -1) { 
          return true; 
         } 
        } 
        return false; 
       } 


       if (backendInfo.firstName.indexOf(filterBy) !== -1 || backendInfo.lastName.toLowerCase().indexOf(filterBy) !== -1 || backendInfo.countryOrigin.toLowerCase().indexOf(filterBy) !== -1 
        || backendInfo.userListMap.indexOf(filterBy) !== -1) { 
        filteredIndexes.push(index); 
       } 

      } 
     } 

這是渲染和最後一部分是拋出錯誤,如果你輸入的東西在桌上,一列返回給定細胞null

的事情是,我可以使代碼工作,如果我改變的最後部分..

 try { 
      if (backendInfo.firstName.indexOf(filterBy) !== -1 || backendInfo.lastName.toLowerCase().indexOf(filterBy) !== -1 || backendInfo.countryOrigin.toLowerCase().indexOf(filterBy) !== -1 
      || backendInfo.userListMap.indexOf(filterBy) !== -1) { 
      filteredIndexes.push(index); 
      } 
     } 
     catch(err) { 
      console.log('Exception') 
     } 

隨着try/catch語句,它的工作原理100%按預期和處理的indexOf返回null .. 。但這不能成爲正確處理它的方式 - 我假設這種異常處理應該是罕見的例外,並且不應該在前端使用真正的異常處理後端。

如何在不使用try/catch的情況下處理標題中的錯誤?

+0

提供變量值 –

回答

1

您使用indexOf,所以一定要確保值不會undefined or null,您可以通過將支票上的每個值是這樣解決這個問題:解決的

let {firstName, lastName, countryOrigin, userListMap} = backendInfo; 

if ((firstName && firstName.indexOf(filterBy) !== -1) 
     || (lastName && lastName.toLowerCase().indexOf(filterBy) !== -1) 
     || (countryOrigin && countryOrigin.toLowerCase().indexOf(filterBy) !== -1) 
     || (userListMap && userListMap.indexOf(filterBy) !== -1)) { 
      filteredIndexes.push(index); 
} 

或其他方式,這是,默認你定義了這些變量的值firstName, lastName, countryOrigin, userListMap,如果它們是數組,那麼它應該是[],如果字符串那麼它應該是''

+0

它工作!對於Javascript中的非專家來說,這不是非常直觀,但是感謝上帝......這一直在推動着我的堅強。謝謝!! – cbll

+0

這是最基本的一個,可能是其他一些更好的方法將是可能的:)專家在js也將提供,直到那使用基本的:) –

相關問題