我有一个像这样的字符串数组
values[0]='1,3,16,5,12,43,13';
values[1]='7,1,3,16,5,23,49,26,13';
values[2]='13,1,3,16,5,23,49,26,12';
// etc.
另一方面,我有一个数组
filter[0]='13';
filter[1]='12';
filter[2]='3';`
我想找到所有值的实例,其中我的所有过滤器项都包含在字符串中(在这种情况下values[0]
和values[2]
匹配,values[1]
不会因为12不见了)。我已经尝试了几个小时,我想这很容易,但我似乎无法找到解决方案。
答案 0 :(得分:4)
您可以使用 filter()
和 every()
来执行此操作
Intent nextActivity=new Intent(this,NextActivity.class);
nextActivity.putExtra("key1",text1);
<强>更新强>
使用 indexOf()
时可能会失败。例如:如果字符串包含var values = ['1,3,16,5,12,43,13', '7,1,3,16,5,23,49,26,13', '13,1,3,16,5,23,49,26,12'],
filter = [13, 12, 3];
var res = values.filter(function(v) { // filter array
return filter.every(function(fil) { // checking all elements are in the string
return v.indexOf(fil) > -1;
});
})
document.write('<pre>' + JSON.stringify(res, null, 3) + '</pre>');
, 6
将匹配。因此,我们可以将 regexObj.test(str)
或 match()
与字边界正则表达式一起使用,以获得更高的精确度。
16
答案 1 :(得分:1)
您可以使用filter和reduce谓词是一个regexp,它检查该值是否与过滤器中的所有值匹配为整个单词。
var values = ['1,3,16,5,12,43,13', '7,1,3,16,5,23,49,26,13', '13,1,3,16,5,23,49,26,12'];
var filter = [13, 12, 3];
var filteredValues = values.filter(function(value){
return filter.reduce(function(p,c){
return p && new RegExp('\\b'+c+'\\b').test(value)
})
});
答案 2 :(得分:1)
var values = [
'1,3,16,5,12,43,13',
'7,1,3,16,5,23,49,26,13',
'13,1,3,16,5,23,49,26,12'
]
var filter = ['13', '12', '3']
var filteredValues = values.map(function(str) {
return str.split(',')
}).filter(function(nums) {
return filter.every(function(n) {
return ~nums.indexOf(n)
})
}).map(function(nums) {
return nums.join(',')
})
console.log(filteredValues.join('\n'))
&#13;
答案 3 :(得分:0)
这是一种方法:
var matches = values.filter(function(str) {
return filter.every(function(item) {
return str.split(',').indexOf(item) >= 0;
});
});
答案 4 :(得分:0)
这应该有所帮助:
function findMatchedValues() {
var count;
var output_array = [];
$.each(values, function(v_index, v_val) {
count = 0;
$.each(filters, function(f_index, f_val) {
if ($.inArray(f_val, v_val.split(",")) !== -1) {
++count;
}
});
if (count === filters.length) {
output_array.push(v_val);
}
});
return output_array;
}