'Getting All Elements In An Array (Javascript)
I am trying to check if a string contains certain words which I had stored in an array... however I'm new to JS, so I don't exactly know how to check all of the elements inside the Array.
Here is an Example:
const fruits = ["apple", "banana", "orange"]
I am actually checking if someone sends swearwords in a chat.
if(message.content.includes(fruits)){executed code}
However my issue is when I check for fruits it does anything but when I check for a specific element in the array like fruits[0] //returns apple
it will actually check for that...
So my issue / question is how do I check the string for all of the elements in the array not just apples.
Solution 1:[1]
Your usage of includes
is wrong.
From MDN:
The includes() method determines whether an array includes a certain value among its entries, returning true or false as appropriate.
arr.includes(valueToFind[, fromIndex])
const fruits = ["apple", "banana", "orange"];
const swearWord = "orange";
// execute is available
if (fruits.includes(swearWord))
console.log("Swear word exists.");
else
console.log("Swear word doesn't exist.");
To check the otherway, if string contains the array's swearword:
const fruits = ["apple", "banana", "orange"];
const swearWord = "this contains a swear word. orange is the swear word";
// execute is available
if (checkForSwearWord())
console.log("Swear word exists.");
else
console.log("Swear word doesn't exist.");
function checkForSwearWord() {
for (const fruit of fruits)
if (swearWord.includes(fruit)) return true;
return false;
}
Solution 2:[2]
You got it the other way around. You have to use .includes on the data array to check if the array includes the word you are looking for.
const fruits = ["apple", "banana", "orange"]
console.log(fruits.includes("banana"))
console.log(fruits.includes("something not in the array"))
Solution 3:[3]
I would use an intersection here. Just in case you don't know what that is ...
An intersection is the elements that two arrays share in common.
For example
swearWords = ["f***", "s***"];
messageWords = ["I", "am", "angry...", "f***", "and", "s***"];
let intersection = messageWords.filter(x => swearWords.includes(x));
console.log(intersection) //-> ["f***", "s***"]
Solution 4:[4]
Reverse it:
if(fruits.includes(message.content)){executed code};
Docs for Array.includes. You are using the String.includes method. You can, alternatively, also use the indexOf
method.
Solution 5:[5]
try this .
fruits.forEach(fruit => {
if (message.content.includes(fruit)) {
console.log('true')
return;
}
console.log('false')
})
Hope this help .
Solution 6:[6]
you can try to use the Array some method
const fruits = ["apple", "banana", "orange"]
const containsFruit = fruit => message.content.includes(fruit);
if(fruits.some(containsFruit)) { executed code }
containsFruit is a function that will return true if a fruit is found in the message.content
fruits.some(containsFruit) will be true if any item in the array is found to be contained in the message.content
Solution 7:[7]
The other way to do this is with a regular expression.
For a large message string, this may be quicker than calling .includes() in a loop vs an array (which needs to loop over the entire string each time). However this should be tested.
let fruits = ["apple", "banana", "orange"]
let fruits_regex = fruits.map(f => f.replace(/(?=\W)/g, '\\')).join('|'); // escape any special chars
// fruits_regex == "apple|banana|orange"
let message = 'apple sauce with oranges';
let matches = [ ...message.matchAll(fruit_regex) ]
// [
// ["apple", index: 0, input: "apple sauce with oranges", groups: undefined]
// ["orange", index: 17, input: "apple sauce with oranges", groups: undefined]
// ]
Solution 8:[8]
const fruits = ["apple", "banana", "orange"]
if(fruits.some(x => message.content.includes(x))){
/* executed code */
};
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Community |
Solution 2 | holydragon |
Solution 3 | 0p3r4t0r |
Solution 4 | |
Solution 5 | Vyas Arpit |
Solution 6 | William Ku |
Solution 7 | James McGuigan |
Solution 8 | kyun |