繁体   English   中英

如何检查JavaScript中对象数组中的索引是否存在?

[英]How can I check index in object array exist or no in javascript?

我的JavaScript代码是这样的:

<script type="text/javascript">
    var team = [{id:"1", name:"chelsea"}, {id:"3", name:"mu"}, {id:"5", name:"arsenal"}];
    for(var i = 0; i < 5; i++) {
        if(team[i].id || typeof team[i].id !== 'undefined' || team[i].id !== null) {
            console.log(team[i].id)
        }
        else {
            console.log(i+1)
        }
    }
</script>

如果代码运行,则在控制台上存在如下错误:

未捕获的TypeError:无法读取未定义的属性“ id”

而如果变量不存在,我有添加条件

我该如何解决?

据我了解,当您在评论输出1,2,3,4,5说您需要缺少ID时-在您的情况下,有2,4

 var team = [{id:"1", name:"chelsea"}, {id:"3", name:"mu"}, {id:"5", name:"arsenal"}]; var empty_ids = 0; for(var i = 0; i < 5; i++) { if(team[i] && typeof team[i] !== 'undefined' && team[i] !== null) { if(parseInt(team[i].id) !== i + 1){ // check if id on the array not equal the i + 1 from the loop for( var k= 1 ; k < parseInt(team[i].id) - empty_ids ; k++){ console.log(empty_ids + k +" missing"); } console.log(team[i].id); }else{ console.log(team[i].id); } empty_ids = parseInt(team[i].id); }else{ if(empty_ids <= i){ console.log(empty_ids + 1 + " undefined team[i]"); empty_ids = empty_ids + 1; } } } 

注意 :即使更改团队数组,此代码也将起作用

var team = [{id:"1", name:"chelsea"}, {id:"5", name:"arsenal"}]; 
//or 
var team = [{id:"1", name:"chelsea"}, {id:"3", name:"mu"}, {id:"4", name:"arsenal"}]; 
//or 
var team = [{id:"1", name:"chelsea"}, {id:"4", name:"arsenal"}];

因此,请尝试将var team =更改为建议值..我添加了一个missingundefined以使您注意到console.log来源

很少的观察,

  1. 而不是for循环内的硬编码值“ 5”,您应该使用数组长度,即在这种情况下为team.length
  2. 代替记录“ i + 1”,您可以记录“ i”,因为数组索引从“ 0”开始。 或者,您可以简单地打印对象/团队名称。

这是修改后的代码,

<script type="text/javascript">
    var team = [{id:"1", name:"chelsea"}, {id:"3", name:"mu"}, {id:"5", name:"arsenal"}];
    for(var i = 0; i < team.length; i++) {
        if(team[i].id || typeof team[i].id !== 'undefined' || team[i].id !== null) {
            console.log(team[i].id)
        }
        else {
            console.log('team id not found for index ' + i);
        }
    }
</script>

主要问题是您正在检查对象的属性,在本例中为team [i],可能未定义。

例如,如果您使用console.log(team [4]),它将指向未定义,因为团队中只有3个对象。 检查未定义的属性将导致错误。

 var arr = [1,2,3] // this will be undefined var element = arr[4] console.log(element.toString) 

因此,您还应该检查team [i]是否未定义。 您的代码应类似于以下代码。 我假设您要打印1、2、3、4、5。

 var team = [{id:"1", name:"chelsea"}, {id:"3", name:"mu"}, {id:"5", name:"arsenal"}]; for(var i = 0; i < 5; i++) { // check if team[i] is not undefined using (team[i] !== undefined) if((team[i] !== undefined) && ( team[i].id || typeof team[i].id !== 'undefined' || team[i].id !== null)) { var currentId = team[i].id > i + 1 ? i + 1 : team[i].id; console.log(currentId) } else { console.log(i + 1); } } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM