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); |
但上面这排不起作用,知道我做错了什么吗?
- 你期望得到什么回应?
- @人造丝不存在字符串我期望为空如果存在我期望为真
- 检查console有无错误…Array#find希望论点是function而不是value。
- arr.find( x => x === str );
- 按照@rayon:developer.mozilla.org/en-us/docs/web/javascript/reference/…
- 如果根据你的评论,你想要一个true或null的结果取决于项目是否存在(与返回索引相比),也许你应该编辑你的问题来提及,因为它会打开像.includes()这样的选项。
- 如何在javascript/jquery中查找数组是否包含特定字符串的可能副本?
- 另一次,请使用搜索引擎在提问之前尝试搜索答案。谷歌搜索数组中查找字符串的第一个结果是问题的副本。
- 如果您的问题实际上是如何使用array.prototype.find(),请编辑您的问题以反映这一点。如果这是您的问题,请解释一下对于您不理解的方法的文档是什么。
- @迈克尔:"没有字符串存在,我希望是空的,如果存在,我希望是真的",你为什么要用null而不是false?
尝试使用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功能的问题可能是因为它的兼容性:
如你所见,你使用不兼容浏览器的机会还不远。
find(在es2015中添加,也称为"es6")需要一个函数谓词。你在找indexOf:
1
| var res = arr.indexOf(str); |
…通过与===比较来发现事物。如果找不到-1,就会得到-1;如果找到了,就会得到它的索引。
你在评论中说:
no string exists I expect null if exists I expect true
…这看起来有点奇怪(我想你想要true或false,但这会给你:
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更有用。
- "或者在ES2015年"——但你已经说过,.find()是ES2015方法……
- @恩:是的,但它可以是多段填充的。我花了整整一年时间才开始发汗。
- 足够公平。像往常一样,你把所有的事情都讲得很好(尽管我也否决了建议.includes()的答案,因为上面的评论说,如果项目存在,他们想要的结果是true,如果不存在,则是null)。
- @我也是。我看不出这个问题(如果项目不在数组中,那么includes不会返回null)。
尝试使用includes。
1 2 3
| var foo = ['aaa', 'bbb', 'ccc'];
console.log(foo.includes('aaa'));
console.log(foo.includes('ddd')); |
输出
注:Array#includes直到ES2016(2016年6月)才添加,所以即使是稍微过时的浏览器也需要一个polyfill/shim(这很简单,MDN上有一个)。
- 很好,includes非常适合"它是否存在"用例。但需要注意的是,includes直到2016年6月才添加(例如,仅仅两个多月前),因此即使是稍微过时的浏览器,也需要一个polyfill/shim(这很简单)。
- 或者,foo.includes('aaa') || null得到true或null结果,即评论中提到的操作。
数组原型的.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 |