假设我有以下数组:
JCodeModel
现在,如果它们包含来自带有部分字符串(var array_full = ['table', 'sleeping', 'data'];
var array_part = ['sleep', 'able'];
)的数组中的项目,我想从包含完整字符串(array_full
)的数组中筛选出项目。
我可以这样:
array_part
但是我敢肯定有更好的方法,不是吗?
编辑:谢谢大家!
答案 0 :(得分:2)
const array_full = ['table', 'sleeping', 'data'];
const array_part = ['sleep', 'able'];
const output = array_full.filter(a => array_part.some(b => a.includes(b)))
console.log(output)
includes
和箭头函数为ES2015 +语法。如果您想使用ES5,可以执行以下操作
var array_full = ['table', 'sleeping', 'data'];
var array_part = ['sleep', 'able'];
var output = array_full.filter(function(a) {
return array_part.some(function(b) {
return a.indexOf(b) > -1
})
})
console.log(output)
答案 1 :(得分:2)
如果您的用例确实涉及在字符串中查找字符串:
您可以从array_part
答案 2 :(得分:2)
DbCommand cmd = dbContext.Database.Connection.CreateCommand();
答案 3 :(得分:1)
您可以过滤数组并查找包含的部分
Array#filter
用于过滤array_full
,Array#some
,用于通过{li>查找array_part
的一部分
String#includes
,检查一个字符串是否包含另一个字符串。
var array_full = ['table', 'sleeping', 'data'],
array_part = ['sleep', 'able'],
result = array_full.filter(s => array_part.some(p => s.includes(p)));
console.log(result);
使用Set
来维护array_part
的顺序,因为否则您将无法获得array_full
的一项。
var array_full = ['table', 'sleeping', 'data'],
array_part = ['sleep', 'able'],
result = Array.from(array_part.reduce(
(r, p) => array_full.reduce((q, s) => s.includes(p) ? q.add(s) : q, r),
new Set
));
console.log(result);
答案 4 :(得分:1)
如果您知道部分单词是由单词字符组成的,并且不包含正则表达式(例如*,$等)专用的字符,则可以将array_part
编译为正则表达式:>
var array_full = ['table', 'sleeping', 'data'];
var array_part = ['sleep', 'able'];
let rx = new RegExp(array_part.join('|'))
console.log(array_full.filter(w => rx.test(w)))