#node.js
Вопрос:
У меня есть 2 массива следующего формата:
array1 = ['cat', 'man', 'new']
array2 = ['catch', 'jim', 'manners', 'renew', 'newcomer']
Я пытаюсь найти массив, содержащий элементы массива 2, если какие-либо строки в массиве 1 содержатся в строке массива 2. В этом случае результат будет:
['catch', 'manners', 'renew', 'newcomer']
Я знаю, что мог бы сделать это с помощью forloop, но мне любопытно, есть ли для этого более простое решение в 1 строку?
Спасибо!
Ответ №1:
Вы можете использовать RegExp.test()
и Array.join()
для создания регулярного выражения с помощью чередования:
const array1 = ['cat', 'man', 'new'];
const array2 = ['catch', 'jim', 'manners', 'renew', 'newcomer'];
const result = array2.filter(v => RegExp(array1.join('|')).test(v));
console.log(result);
Примечания:
- Вы должны быть осторожны, когда строки содержат специальные символы, их нужно будет экранировать.
- С точки зрения производительности, лучше создать
RegExp
один раз, а не создавать его внутриfilter()
обратного вызова.
Ответ №2:
С filter()
помощью , some()
и includes()
это можно сделать в одной строке:
let array1 = ['cat', 'man', 'new'];
let array2 = ['catch', 'jim', 'manners', 'renew', 'newcomer'];
let ans = array2.filter(x => array1.some(a => x.includes(a)));
console.log(ans);
Ответ №3:
array1 = ['cat', 'man', 'new']
array2 = ['catch', 'jim', 'manners', 'renew', 'newcomer']
const result = array2.filter(word => array1.some(phrase => word.includes(phrase)))
console.log(result)
Вы можете использовать фильтр() и некоторые()