过滤数组的字符串数组

时间:2015-11-28 05:56:39

标签: javascript arrays

我有一个像这样的字符串数组

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是一个选项。

5 个答案:

答案 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)

&#13;
&#13;
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;
&#13;
&#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;    
}