javascript - 在字符串数组中查找字符组合
问题描述
我想知道数组中是否有 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
解决方案
您可以通过短路迭代数组并展开字符串并检查所需字符的位置。
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
推荐阅读
- r - RPostgreSQL - 将 R 中的参数传递给 RPostgreSQL 中的查询
- swift - 离子框架中的结构
- rest - 邮递员:设置环境变量
- amazon-web-services - 使用 Lambda 收集 EBS 指标
- java - 在面向读写块的过程中,Spring Batch 在哪里提交?
- java - 反编译未混淆的 apk 包含 java 代码中的错误
- c# - Entity Framework Core - 包含在本地或数据库搜索扩展方法中
- redis - 为什么一个简单的 set 命令变成了一个慢查询,Redis?
- javascript - 如何从 data() vue.js 的两个不同数组中显示 v-for
- android - android webview滚动不流畅,滞后