I have an array like this:
array = ["123", "456", "#123"]
I want to find the element which contains the substring "#"
. I tried array.includes("#")
and array.indexOf("#")
but it didn't work.
How can I check if any of the strings in this array contain the substring "#"
?
There appears to be multiple questions here since the title and post body differ. Do you want to know if the array has an element or do you want to get the element itself? If you want to get an element, which one(s) do you want -- the first occurrence, the last occurrence or an array of all occurrences?
This post is intended as a resource for future visitors who might not necessarily want to find
(ie return the first element from the left) as the top answer shows. To elaborate on that answer, there's a gotcha with indiscriminately replacing some
with find
in a boolean context -- the element returned may be falsey as in
if ([5, 6, 0].find(e => e < 3)) { // fix: use `some` instead of `find` console.log("you might expect this to run"); } else { console.log("but this actually runs " + "because the found element happens to be falsey"); }
Note that e => e.includes("#")
can be substituted with any predicate, so it's largely incidental to the question.
const array = ["123", "456", "#123"]; console.log(array.some(e => e.includes("#"))); // true console.log(array.some(e => e.includes("foobar"))); // false
const array = ["123", "456", "#123"]; console.log(array.every(e => e.includes("#"))); // false console.log(array.every(e => /\d/.test(e))); // true
const array = ["123", "456", "#123", "456#"]; console.log(array.find(e => e.includes("#"))); // "#123" console.log(array.find(e => e.includes("foobar"))); // undefined
const array = ["123", "456", "#123", "456#"]; console.log(array.findIndex(e => e.includes("#"))); // 2 console.log(array.findIndex(e => e.includes("foobar"))); // -1
MDN: Array.prototype.findIndex()
const array = ["123", "456", "#123", "456#"]; console.log(array.filter(e => e.includes("#"))); // ["#123", "456#"] console.log(array.filter(e => e.includes("foobar"))); // []
const filterIndices = (a, pred) => a.reduce((acc, e, i) => { pred(e, i, a) && acc.push(i); return acc; }, []); const array = ["123", "456", "#123", "456#"]; console.log(filterIndices(array, e => e.includes("#"))); // [2, 3] console.log(filterIndices(array, e => e.includes("foobar"))); // []
const findLast = (a, pred) => { for (let i = a.length - 1; i >= 0; i--) { if (pred(a[i], i, a)) { return a[i]; } } }; const array = ["123", "456", "#123", "456#"]; console.log(findLast(array, e => e.includes("#"))); // "456#" console.log(findLast(array, e => e.includes("foobar"))); // undefined
const findLastIndex = (a, pred) => { for (let i = a.length - 1; i >= 0; i--) { if (pred(a[i], i, a)) { return i; } } return -1; }; const array = ["123", "456", "#123", "456#"]; console.log(findLastIndex(array, e => e.includes("#"))); // 3 console.log(findLastIndex(array, e => e.includes("foobar"))); // -1
您可以使用加入方法:
array.join('').indexOf("#")
Use Array.some :
array.some((item) => item.includes('#'));
It just checks if some item includes '#' - readable and clear.
You can use filter ().
var array = ["123", "456", "#123"];
console.log(array.filter(function(item){
var finder = '#';
return eval('/'+finder+'/').test(item);
}));
By passing a function you can filter and return the elements that match what you are looking for.
In this example, I made use of eval (), just because to fetch the string use RegExp, but could fetch with the == operator.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.