Javascript: из заданного массива получить уменьшенный массив элементов, содержащихся в строке

#javascript

#javascript

Вопрос:

Из этих случайных строк и массивов:

 var str = "She folded her handkerchief neatly.";
var arr = ['foo', 'folded', 'bar', 'neatly'];
  

Как получить уменьшенный массив, который сохраняет только значения, содержащиеся в строке ?

 var res = ['folded', 'neatly'];
  

Комментарии:

1. разделение, фильтр, включает

2. Можете ли вы показать нам свою текущую попытку?

3. Разделите строку на массив, а затем вы можете зациклить новый сформированный массив, сравнить со своим вторым массивом

Ответ №1:

Это легко сделать с помощью Array.filter() и String.match()

 var str = "She folded her handkerchief neatly.";
var arr = ['foo', 'folded', 'bar', 'neatly'];

let res = arr.filter(s => str.match(s));
console.log(res);  
 .as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}  

Комментарии:

1. @maxagaz: Имейте в виду, что это будет соответствовать любой части слова в строке, поэтому, если "eat" было в массиве, это будет считаться совпадением.

2. @zi Полезно знать. Спасибо.

Ответ №2:

Вы можете достичь этого с помощью Array.filter и String.includes

 var str = "She folded her handkerchief neatly.";
var arr = ['foo', 'folded', 'bar', 'neatly'];

filteredArr = arr.filter(item => str.includes(item))

console.log(filteredArr);
  

Ответ №3:

Используя новые функции JS. Вы можете использовать функцию ES6 includes() . И это работает быстрее, чем другие методы с точки зрения производительности

 var str = "She folded her handkerchief neatly.";
var arr = ['foo', 'folded', 'bar', 'neatly'];

let res = [];
arr.forEach((arrString) => {
  str.includes(arrString) ? 
    res.push(arrString)   :
    return;
});
console.log(res);