根据数组筛选字符串数组
Filter array of strings against array
我有一个类似的字符串数组
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)。我已经试了几个小时了,我想这真的很容易,但我似乎找不到解决方案。
如果jQuery有帮助的话,它是一个选项。
您可以使用filter()
和every()
进行
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>');
更新:
使用indexOf()
时可能会失败。例如:如果字符串包含16
,则6
将匹配。因此,为了获得更高的精度,我们可以将regexObj.test(str)
或match()
与单词边界正则表达式一起使用。
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 new RegExp('''b' + fil + '''b').test(v);
// or return v.match(new RegExp('''b' + fil + '''b'));
});
})
document.write('<pre>' + JSON.stringify(res, null, 3) + '</pre>');
您可以使用filter和reduce,其中谓词是一个正则表达式,用于检查值是否与筛选器中的所有值作为一个完整单词匹配。
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)
})
});
map()
split()
filter()
every()
indexOf()
join()
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'))
这里有一种方法:
var matches = values.filter(function(str) {
return filter.every(function(item) {
return str.split(',').indexOf(item) >= 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;
}
相关文章:
- 高亮显示与数组字符串一起使用时文本插件中断
- 从数组/字符串中删除所有小数和单个数字
- 使用Javascript regex替换“index”数组字符串
- 如何将复选框中的选中值收集为 javascript 数组/字符串
- 将数组数组字符串转换为 Javascript 数组数组的优雅方法
- 如何将数组字符串转换为数组
- 通过数组字符串访问JavaScript对象中的值
- Javascript数组字符串作为图像键
- Chrome和Firefox正在检索字符,而不是javascript中的数组字符串
- 如何在 JavaScript 函数中从 PHP end 传递数组字符串作为参数
- Jquery 如何检查数组字符串值是否在文本区域中
- 如何转换数组字符串
- JS数组字符串将名称修补到数组(对象)
- 在Javascript中从数组字符串中查找单个或多个值
- 如何将java数组字符串分配给javascript数组字符串
- 如何在javascript中将子数组字符串的数组转换为子数组的数组?
- 如何将字符串中的特殊值放入数组字符串
- 如何在JavaScript中给出RouteUrl中的数组字符串
- 在javascript的for循环中设置数组's字符串元素的长度为一个变量
- 如何从“数组字符串”中获取键值在javascript