javascript 函数 inArray

IT技术 javascript arrays
2021-03-08 19:53:48

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

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

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

6个回答

你可以制作一个数组原型函数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 循环内(对于多语言程序员)。但是,作用域是整个函数。此外,在其作用域的最高点声明变量通常被认为是一种很好的做法,也是避免作用域冲突的好方法。
2021-04-28 19:53:48
MDN 有一个可以剪切和粘贴的 polyfill:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
2021-04-16 19:53:48
我意识到以上内容已经过时,但值得未来的读者回答。array.indexOf() 是 Javascript 1.6。旧版本的 Javascript,如 Internet Explorer 中的那些,不支持它,因此我们将在需要时使用自定义方法/polyfill。
2021-05-03 19:53:48
有趣的。这个答案 (.indexOf(.)) 似乎对我有用。作为新手,我很想知道为什么该语言中的方法不如自定义函数更受欢迎。
2021-05-13 19:53:48

像这样的东西?

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

    return false;
}
我可能不应该使用 for(key in array)。如果有人扩展了 Array 对象,那么它也会迭代新的方法/属性(不仅仅是数组值)。
2021-04-21 19:53:48
-1 最好使用 Array.prototype.indexOf(),使用下划线、jQurey 等库进行回退,最后如果没有需要或可用的库,则使用上述解决方案,除了检查 Object.prototype.hasOwnProperty()。
2021-05-10 19:53:48

看看这个相关的问题这是来自最高投票答案的代码。

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

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

这是一个演示:

const array1 = [1, 2, 3];

console.log(array1.includes(2));
// expected output: true