最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

discord.js - Getting All Elements In An Array (Javascript) - Stack Overflow

programmeradmin4浏览0评论

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.

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.

Share Improve this question edited Apr 30, 2022 at 10:59 Gass 9,3445 gold badges46 silver badges53 bronze badges asked Jun 10, 2020 at 4:04 PandaDevPandaDev 13111 bronze badges 3
  • Does this answer your question? Determine whether an array contains a value – Always Helping Commented Jun 10, 2020 at 4:09
  • Can you please clarify what message.content is? Is it a string or is it an array? I sorta get the impression it is for example some comment a user posts in a thread, and you want to see if any of the words in your array are found within it, yes? – CrayonViolent Commented Jun 10, 2020 at 4:14
  • yes sorry, message.content is a string, it is in discord.js I had added that tag but forgot to clarify it – PandaDev Commented Jun 10, 2020 at 4:17
Add a comment  | 

8 Answers 8

Reset to default 10

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;
}

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"))

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***"]

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.

try this .

fruits.forEach(fruit => {
    if (message.content.includes(fruit)) {
        console.log('true')
        return;
    }
    console.log('false')
})

Hope this help .

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

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]
// ]

const fruits = ["apple", "banana", "orange"]
if(fruits.some(x => message.content.includes(x))){
  /* executed code */
};
发布评论

评论列表(0)

  1. 暂无评论