关于javascript:使用原型函数在数组中查找字符串

Find string in array using prototype functions

我有这个阵列:

1
2
var str ="rrr";
var arr = ["ddd","rrr","ttt"];

我尝试检查arr是否包含str。我尝试以下方法:

1
  var res = arr .find(str);

但上面这排不起作用,知道我做错了什么吗?


尝试使用indexof:它得到了更广泛的支持,您可以得到相同的结果。

1
2
3
4
5
var index = arr.indexOf(str);
if(index != -1) {
  console.log("found");
  var element = arr[index]; //element found of your array
}

您对find功能的问题可能是因为它的兼容性:

enter image description here

如你所见,你使用不兼容浏览器的机会还不远。


find(在es2015中添加,也称为"es6")需要一个函数谓词。你在找indexOf

1
var res = arr.indexOf(str);

…通过与===比较来发现事物。如果找不到-1,就会得到-1;如果找到了,就会得到它的索引。

你在评论中说:

no string exists I expect null if exists I expect true

…这看起来有点奇怪(我想你想要truefalse,但这会给你:

1
var res = arr.indexOf(str) != -1 || null;

…因为javascript的强大的||操作符(这是我博客上的一篇文章)。

仅为完整了解find

但您可以使用find;es5版本(如果您是多填充的,但不是蒸腾的):

1
var res = arr.find(function(entry) { return entry === str; });

或在ES2015:

1
let res = arr.find(entry => entry === str);

如果没有找到,那么res就是null;如果找到,那么str。但是,你已经有了str,所以…:-)当通过属性值搜索对象时,find更有用。


尝试使用includes

1
2
3
var foo = ['aaa', 'bbb', 'ccc'];
console.log(foo.includes('aaa'));
console.log(foo.includes('ddd'));

输出

1
2
true
false

注:Array#includes直到ES2016(2016年6月)才添加,所以即使是稍微过时的浏览器也需要一个polyfill/shim(这很简单,MDN上有一个)。


数组原型的.find方法需要输入函数回调,而不是您要查找的字符串。

1
2
3
var res = arr.find(function (element) {
  return element === str;
};

在这里阅读更多关于它的信息。


使用简单的indexOf方法很容易。只需检查文档。

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