【问题标题】:javascript function inArrayjavascript 函数 inArray
【发布时间】:2021-10-21 20:31:34
【问题描述】:

我需要一个 javascript 函数,它可以接收一个字符串和一个数组,如果该字符串在数组中,则返回 true..

 function inArray(str, arr){
   ...
 }

警告:它不能使用任何 javascript 框架。

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    你可以只做一个数组原型函数ala:

    Array.prototype.hasValue = function(value) {
      var i;
      for (i=0; i<this.length; i++) { if (this[i] === value) return true; }
      return false;
    }
    
    if (['test'].hasValue('test')) alert('Yay!');
    

    注意使用 '===' 而不是 '==' 如果您需要不太具体的匹配,您可以更改它...否则 [3].hasValue('3') 将返回 false。

    【讨论】:

    • 在 for(...) 中包含 var 在逻辑上具有误导性,因为它表明 var 的范围仅在 for 循环内(对多语言程序员而言)。但是,范围是整个函数。此外,在其作用域的最高点声明变量通常被认为是一种好的做法,也是避免作用域冲突的好方法。
    【解决方案2】:

    【讨论】:

    • 有趣。这个答案 (.indexOf(.)) 似乎对我有用。作为一个新手,我很想知道为什么该语言中的方法不如自定义函数更受欢迎。
    • 我意识到以上内容已经过时,但值得为未来的读者回答。 array.indexOf() 是 Javascript 1.6。旧版本的 Javascript(如 Internet Explorer 中的那些)不支持它,因此我们将在需要时使用自定义方法/polyfill。
    • MDN 有一个可以剪切和粘贴的 polyfill:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
    【解决方案3】:

    这样的?

    function in_array(needle, haystack)
    {
        for(var key in haystack)
        {
            if(needle === haystack[key])
            {
                return true;
            }
        }
    
        return false;
    }
    

    【讨论】:

    • 我可能不应该使用 for(key in array)。如果有人扩展了 Array 对象,那么它也会迭代新的方法/属性(不仅仅是数组值)。
    • -1 最好使用 Array.prototype.indexOf(),使用下划线、jQurey 等库作为后备库,最后如果不需要或没有库可用,则使用上述解决方案,除了检查 Object。原型.hasOwnProperty().
    【解决方案4】:

    你可以简单地使用:Array.prototype.includes()

    这是一个演示:

    const array1 = [1, 2, 3];
    
    console.log(array1.includes(2));
    // expected output: true
    

    【讨论】:

      【解决方案5】:

      看看this related question。这是投票率最高的答案中的代码。

      function contains(a, obj) {
        var i = a.length;
        while (i--) {
          if (a[i] === obj) {
            return true;
          }
        }
        return false;
      }
      

      【讨论】:

        【解决方案6】:

        小心:

        indexOf() 使用部分数据。如果你有 '12', '1'

        indexOf('1') 会得到 '12' 而不是 '1' 的索引

        【讨论】:

        • 我认为你错了我不能对你投反对票,但你能支持你的回答吗?我的 jsfiddle here 证明你错了
        • 我认为你混淆了索引,上面的例子会给你一个索引,它是'1'的正确索引。永远记住,第一个数组元素的索引为零,即“12”的索引看看你的例子的精确副本here
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-04
        • 2012-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多