如何检查字符串数组是否包含另一数组全部元素并生成符合条件的新数组
解决方法:用filter + every + includes实现严格匹配
嘿,这个需求我太熟悉了!你说的filter确实是核心,但还要搭配every来确保array2的所有元素都被包含,而不是单个匹配。刚好你的示例场景非常典型,直接上代码和解释:
完整代码实现
const array1 = ['apple_mango_banana', 'mango_apple_banana', 'apple_banana']; const array2 = ['apple', 'mango']; // 筛选逻辑:只有当array2的所有子串都在当前item中存在时,才保留该item const matchedArray = array1.filter(item => { return array2.every(subString => item.includes(subString)); }); console.log(matchedArray); // 输出结果:['apple_mango_banana', 'mango_apple_banana']
逻辑拆解
array1.filter(item => ...):遍历array1的每一个元素,只保留符合条件的元素array2.every(subString => item.includes(subString)):这一步是关键!every会检查array2的每一个子串是否都能被当前item包含,只有全部满足时才返回true,确保了“严格包含array2全部元素”的要求item.includes(subString):判断单个子串是否存在于当前元素中,完全适配你的下划线分隔字符串场景
额外边界提示(可选)
如果需要处理array2为空的情况,可以加个简单判断:
const matchedArray = array2.length === 0 ? [...array1] // 如果array2为空,直接返回原数组(或者根据需求返回空数组) : array1.filter(item => array2.every(subStr => item.includes(subStr)));
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

