首页 > 解决方案 > 在字符串数组中查找字符组合

问题描述

我想知道数组中是否有 str x 的任何组合。一击就可以了。

var x = 'ACBC';
var arr = ['X','AB'];
var arr2 = ['X','234','C'];
var arr3 = ['X','CC'];
var arr4 = ['X','BB'];

console.log(containsString(arr,x)) // true
console.log(containsString(arr2,x)) // true
console.log(containsString(arr3,x)) // true
console.log(containsString(arr4,x)) // false

标签: javascript

解决方案


您可以通过短路迭代数组并展开字符串并检查所需字符的位置。

function containsString(array, string) {
    return array.some(s => [...s].every(
        (i => c => i = string.indexOf(c, i) + 1)(0)
    ));
}

var x = 'ACBC',
    arr = ['X', 'AB'],
    arr2 = ['X', '234', 'C'],
    arr3 = ['X', 'CC'],
    arr4 = ['X', 'BB'];

console.log(containsString(['X', 'AB'], 'ACBC'));       //  true
console.log(containsString(['X', 'BA'], 'ACBC'));       // false, see below
console.log(containsString(['X', '234', 'C'], 'ACBC')); //  true
console.log(containsString(['X', 'CC'], 'ACBC'));       //  true
console.log(containsString(['X', 'BB'], 'ACBC'));       // false

虽然以上仅适用于已排序的字符串,但您需要提前排序才能使用它indexOf并更改起始位置。

function containsString(array, string) {
    var sorted = [...string].sort();
    return array.some(s => [...s].sort().every(
        (i => c => i = sorted.indexOf(c, i) + 1)(0)
    ));
}

console.log(containsString(['X', 'AB'], 'ACBC'));       //  true
console.log(containsString(['X', 'BA'], 'ACBC'));       //  true now
console.log(containsString(['X', '234', 'C'], 'ACBC')); //  true
console.log(containsString(['X', 'CC'], 'ACBC'));       //  true
console.log(containsString(['X', 'BB'], 'ACBC'));       // false


推荐阅读