“为什么indexOf在找不到元素时返回-1”

时间:2016-01-08 13:02:00

标签: javascript

    var JOURNAL = [
      {"events":["carrot","exercise","weekend"],"squirrel":false},
      {"events":["bread","pudding","brushed teeth","weekend","touched tree"],"squirrel":false}]

      function hasEvent(event, entry) {
          var x = entry.events.indexOf(event)

          console.log(x)
          //-1    

      return  x != -1;
    }
      hasEvent('pizza', JOURNAL[0])

例如:JOURNAL [0]中没有“披萨”,因此返回-1会导致x返回false。

据我所知,如果没有找到该事件,则返回-1!

我的问题是为什么它会返回-1?背后有什么理由吗?

非常感谢

编辑:问这个问题不好吗?那就是我被投票的原因?遗憾!

7 个答案:

答案 0 :(得分:2)

使用

-1是因为它是第一个,也许是最令人难忘的数字,不能被误认为是数组中的实际索引。

任何数字零或更大可能是一个索引,并且没有理由通过使用一些随机的“幻数”来使事情复杂化。

答案 1 :(得分:0)

return x != -1;

这将返回条件语句的结果,truefalse,以防x不等于-1

答案 2 :(得分:0)

这就是数组indexOf的工作原理

var array = [2, 9, 9];
array.indexOf(2);     // 0
array.indexOf(7);     // -1

在你的例子中

var events =  ["carrot","exercise","weekend"];
events .indexOf("carrot");     // 0
events .indexOf("csarrot");     // -1

您的方法hasEvent()会返回x indexOf值,而不是数组events

function hasEvent(event, entry) 
{
      var x = entry.events.indexOf(event); 
      return  x != -1; // if the event was found in entry.events array then it will return the index of the item otherwise -1
}

答案 3 :(得分:0)

如果找不到indexOf

-1会返回event。因此,x!=-1表示找到event

答案 4 :(得分:0)

来自Mozilla Developer

  

indexOf()方法返回可在数组中找到给定元素的第一个索引,如果不存在则返回-1。

考虑到这一点,检查x != -1表示检查event数组中是否找到entry.events,换句话说,"返回是否找到该对象是否在数组中#34;。

答案 5 :(得分:0)

使用indexOf在数组中搜索时,将返回元素索引。在数组中,索引以0开头。因此,第一个元素将具有索引0,依此类推......

但如果找不到该元素,则返回-1

所以当你说x != -1时,就意味着搜索元素存在于数组中。

根据Array - MDN

  

JavaScript数组是零索引的:数组的第一个元素是索引0,最后一个元素的索引等于数组的长度属性减去1的值。

有关indexOf的详细信息,请查看MDN

答案 6 :(得分:0)

  

我的问题是为什么它会返回-1?

因为这是指定函数array.indexOf的方式:

indexOf()方法返回可在数组中找到给定元素的第一个索引,如果不存在则返回-1。来源:Array.prototype.indexOf

  

背后有什么理由吗?

这有一个合乎逻辑的原因:JavaScript中的数组是0索引的。因此,范围(0,...,array.length - 1)中的所有值都是有效索引值,即当元素在数组中时可能返回。将array.length返回到 not found 将会相当尴尬,因为它会强制调用者始终检查array.length来解释该值。

因此,-1是表示 not found 的始终明显的值,因为它永远不是有效的索引值。

  

x!= -1是什么意思?

这意味着如果找到hasEvent参数true,则event将返回false,如果没有,则Intent openNewActivity = new Intent(getApplicationContext(), Activity2.class); openNewActivity.putExtra("image", "www.fb.com/profilepic.png"); startActivity(openNewActivity);