【问题标题】:Javascript Checking array for presence of a specific numberJavascript 检查数组是否存在特定数字
【发布时间】:2010-12-20 05:26:29
【问题描述】:

我在这里搜索了很多问题,但没有找到我认为符合我要求的问题,所以如果你知道一个,请链接到它。

我有一个数组,我想搜索一个特定的数字,如果该数字在数组中,我想采取行动,如果没有,则采取另一个行动。

我有这样的事情

var Array = ["1","8","17","14","11","20","2","6"];

for(x=0;x<=Array.length;x++)
{
    if(Array[x]==8)
        then change picture.src to srcpicture1
    else
        then change picture.src to srcpicture2
}

但这将运行数组的长度并最终检查数组的最后一个元素,因为最后一个元素不是 8,所以它将图片更改为图片 2。

现在我明白为什么会发生这种情况了,我只是不知道如何检查数组是否包含特定数字。

提前致谢。

【问题讨论】:

  • 我建议你不要使用 Array 作为变量名。即使它有效(我不确定),它也可能会导致问题。
  • 我知道,其实我不知道,我忘了写 myArray

标签: javascript arrays element contains


【解决方案1】:

你可以自己写一个函数来检查一个元素是否属于一个数组:

function inArray(array, value) {
    for (var i = 0; i < array.length; i++) {
        if (array[i] == value) return true;
    }
    return false;
}

就这样吧:

var arr = ["1","8","17","14","11","20","2","6"];
if (inArray(arr, 8)) {
    // change picture.src to srcpicture1
} else {
    // change picture.src to srcpicture2
}

这对我来说更具可读性。


您可以像这样将函数添加到数组原型中:

Array.prototype.has = function (value) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] === value) return true;
    }
    return false;
};

然后调用将是

if (arr.has(8)) // ...

更进一步,您可以检查数组上的 indexOf() 方法并使用它 - 如果没有 - 将其替换为上面的代码。


附:尽量不要使用Array 作为变量名,因为它是为实际数组类型保留的。

【讨论】:

  • 谢谢埃米尔。这听起来是个好主意,我现在试试
  • 我能说-不要修改内置对象原型吗?仅当您必须... 关于您的问题 - 这里有一个很好的轻量级(!)库,称为 underscore.js。使用数组等的 50 种有用方法。试试吧。您会发现与 AND 一起工作很好,可以从中学习 ;) documentcloud.github.com/underscore
  • 不修改内置对象会破坏 JavaScript 的一半目的。它可以负责任地完成。
【解决方案2】:

如果您有唯一的键并且您非常关心更快的检索,您可以考虑使用映射而不是数组(如果存在使用数组的硬绑定情况,那么它就行不通了课程)。如果使用地图,您只需检查“if(num in arr)”。

【讨论】:

    【解决方案3】:
    【解决方案4】:

    您可以先对数组进行排序,然后只检查数组,直到数组中存在数字的点为止。

    【讨论】:

      【解决方案5】:

      当你找到正确的数字时,为什么不中止循环:

      for(x=0;x<=Array.length;x++)
      {
          if(Array[x]==8) {
              //change picture.src to srcpicture1
              break;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-05-03
        • 1970-01-01
        • 2020-04-02
        • 2012-11-16
        • 2013-10-25
        • 2015-12-27
        相关资源
        最近更新 更多