Javascript 如何处理返回的索引';空';不使用try/catch(err)?

Javascript 如何处理返回的索引';空';不使用try/catch(err)?,javascript,arrays,reactjs,fixed-data-table,Javascript,Arrays,Reactjs,Fixed Data Table,我正在用数据填充一个表-使用固定数据表,它是React.js组件。然而,这在现阶段并不重要 该表有一个搜索框,问题源于此 首先,这里是代码中有趣的部分 for (var index = 0; index < size; index++) { if (!filterBy || filterBy == undefined) { filteredIndexes.push(index); } e

我正在用数据填充一个表-使用
固定数据表
,它是React.js组件。然而,这在现阶段并不重要

该表有一个搜索框,问题源于此

首先,这里是代码中有趣的部分

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);
                }

            }
        }
使用try/catch,它100%按预期工作,并处理返回null的indexOf。。。但这不是正确处理它的方法——我假设这种异常处理应该是针对罕见的异常,并且不应该像后端那样在前端使用


在上面的Javascript代码中,如何处理返回null的indexOf?它可能会在正在填充的任何源列中返回null

如果找不到密钥,JS将抛出一个错误
Try catch
是修复这些错误的好方法,但还有一种替代方法:

在将值推入对象之前,可以检查对象中是否存在键

var data={};
var key=“测试”;
//你的方法很有效
试一试{
var值=data.firstname.indexOf(键);
}捕获(错误){}
//另一种方法,我更喜欢try/catch
var value=data.firstname?data.firstname.indexOf(key):未定义;
//测试对象是否为您要查找的对象类型
//我认为这是最好的选择。
if(数组的data.firstname实例){
var值=data.firstname.indexOf(键);
}
//您可以使用代码中的最后一个选项,如下所示:
var firstnameHasKey=data.firstname instanceof数组&&~data.firstname.indexOf(key);
var lastnameHasKey=data.lastname instanceof数组&&~data.lastname.indexOf(key);
if(firstnameHasKey | | lastnameHasKey){
//逻辑

}
indexOf应返回r
-1
或任何索引,不得为空。如果它抛出错误,那不是因为它返回null。你能用示例数据在代码段中实现这一点吗?
indexOf
在数组上运行时永远不会返回
null
;您前面的一个变量(
backendInfo
或其属性之一)必须是罪魁祸首。您得到的确切错误文本是什么?啊,对不起。我措词不当。输入数据可能有一个值为null的键。这就是我的意思。我得到的错误是
uncaughttypeerror:cannotreadproperty'indexOf'为null
,类似于
cannotreadproperty'indexOf'为undefined的错误“
?那将是一个巨大的挑战difference@Randy我只是把错误放在上面-
uncaughttypeerror:无法读取null的属性'indexOf'
我尝试在一个if语句中实现整个过程;它不会抛出错误,但搜索功能已经过时了。我将尝试按照您的建议创建变量。@cbll您唯一需要更改的是检查
instanceof
的设置是否正确。这不应该改变结果,只是防止错误。我偶然得到了
firstnameHasKey&&lastnameHasKey
,这显然应该是
firstnameHasKey | | | lasthameHasKey
。但是我们仍然应该检查indexOf是否没有返回-1?我尝试过,但是搜索仍然没有像try/except:/尝试创建一个运行的JSFIDLE或代码段那样工作,我会看看我能为你做些什么。
        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')
        }