【问题标题】:How can I check index in object array exist or no in javascript?如何在javascript中检查对象数组中的索引是否存在?
【发布时间】:2017-11-19 21:59:28
【问题描述】:

我的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>

如果代码运行,控制台上会出现这样的错误:

未捕获的类型错误:无法读取未定义的属性“id”

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

我该如何解决?

【问题讨论】:

  • 使用i &lt; team.length。您正在遍历数组大小之外。
  • @OmG,看来我的情况不同
  • @Terry,如果我上面的代码运行,我希望控制台上的结果是这样的:1 2 3 4 5。如果我使用您的答案,结果如下:1 3 5 4 5
  • 如果你坚持在数组大小之外运行,那么首先在循环内检查 team[i] 是否为假——它必须是你的 if 条件中的第一个检查。

标签: javascript arrays object for-loop


【解决方案1】:

很少观察,

  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>

【讨论】:

  • 我知道。但就我而言,它应该使用for(var i = 0; i &lt; 5; i++)
  • 你不能用这个。由于您的团队数组大小为 3。在 for 循环中,您尝试访问第 4 和第 5。因此,您会得到类型数组,因为团队数组中没有第 4 个元素。
【解决方案2】:

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

例如,如果您使用 console.log(team[4]),它将指向 undefined,因为团队中只有 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);
    }
}

【讨论】:

  • 这会打印出1 3 5 4 5,这已经被明确描述为不正确的输出。 (我不知道为什么,但是提出一个给出这个输出的答案似乎仍然很愚蠢。)
  • 你的新代码很奇怪。你能解释一下是什么让你相信这会对原始海报有所帮助吗?
  • 这很奇怪,但我这样做是为了回答这个问题。
  • 我的假设是他想用他的代码打印 1 2 3 4 5,我稍微修改了一下。
  • 我假设当他说“我该如何解决它?”时,他希望人们修改他的代码,以便它打印 1 2 3 4 5,无论出于何种原因。
【解决方案3】:

据我了解,当您在评论输出 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 的来源

【讨论】:

    猜你喜欢
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 2014-12-09
    • 1970-01-01
    • 2013-03-21
    相关资源
    最近更新 更多