1

let array1 = ["?", "!", "."];
let array2 = ["live.", "ali!", "harp", "sharp%", "armstrong","yep?"];

console.log(array2.filter((x) => x.endsWith("?")));

The output is just: ['yep?']

Because the function endsWith() only checked for "?" as you see in the code. How do I loop the elements on the array1 (suffixes) inside the endsWith function so the output is:

['live.', 'ali!', 'yep?']
Nick Parsons
  • 45,728
  • 6
  • 46
  • 64
Royal ey
  • 15
  • 1
  • 2

2 Answers2

1

You could use a regex, and then match each element in the filter iteration against it.

/[?!.]$/ says match one of these things in the group ([?!.]) before the string ends ($).

const arr = ['live.', 'ali!', 'harp', 'sharp%', 'armstrong', 'yep?'];
const re = /[?!.]$/;

const out = arr.filter(el => el.match(re));
console.log(out);

Regarding your comment you can pass in a joined array to the RegExp constructor using a template string.

const query = ['.', '?', '!'];
const re = new RegExp(`[${query.join('')}]$`);

const arr = ['live.', 'ali!', 'harp', 'sharp%', 'armstrong', 'yep?'];

const out = arr.filter(el => el.match(re));
console.log(out);
Andy
  • 61,948
  • 13
  • 68
  • 95
  • How do you make this so you can input an array inside the regex instead? so instead of suffix... we get the strings with [ "ive." , "li!" , "ep?"] – Royal ey Jun 11 '22 at 12:07
  • @Royaley added a new example showing how to use an array in a regex. – Andy Jun 11 '22 at 12:17
  • 1
    Regex is so powerful oof, I can't thank you enough for this. much love bruh <3 – Royal ey Jun 11 '22 at 12:33
0

You can use an inner .some() call to loop over your array1 and return true from that when you find a match instead of hardcoding the ?:

const array1 = ["?", "!", "."];
const array2 = ["live.", "ali!", "harp", "sharp%", "armstrong","yep?"];

const res = array2.filter((x) => array1.some(punc => x.endsWith(punc)));
console.log(res);

Above, when you return true (or a truthy value) from the .some() callback, the .some() method will return true, otherwise it will return false if you never return true, thus discarding it.

Nick Parsons
  • 45,728
  • 6
  • 46
  • 64