#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);