在javascript中查找从数组到数组的字符串匹配数?

时间:2015-10-17 06:39:30

标签: javascript jquery arrays

我需要查找数组b中包含数组arr的字符串数。我得到了输出,但我按此顺序需要它。[[3,6,0],[1,3,1]]
我的代码在这里。

var arr = [["00","00","00","01","01","01","01","01","01"],["000","100","01","01","01"]];
var b = ["00","01",10];
var cc = [];
for (var i=0;i<b.length;i++) {
    var k = [];
    for (var y=0;y<arr.length;y++) {
        var a = 0;
        for (var x=0;x<arr[y].length;x++) {
            if ((arr[y][x].substring(0,2)).indexOf(b[i]) != -1) {
                a++;
            }
        }
        k.push(a)
    }
    cc.push(k);
}
console.log(JSON.stringify(cc));// output :[[3,1],[6,3],[0,1]]

实际输出:[[3,1],[6,3],[0,1]]
预期产出:[[3,6,0],[1,3,1]]
我想在javascript或jquery中得到结果。

2 个答案:

答案 0 :(得分:2)

正如b号码10中所示,您需要将其转换为String然后搜索数组,因为arr仅包含字符串

&#13;
&#13;
var arr = [
    ["00","00","00","01","01","01","01","01","01"],
    ["000","100","01","01","01"]
];

var b = ["00", "01", 10];

var len, i, j, key, result = [], counts = [], count = 0;

for (i = 0, len = arr.length; i < len; i++) {    
    for (j = 0; j < b.length; j++) {    	
        count = 0;        
   	key = String(b[j]);
        
        count = arr[i].filter(function (el) {
       	    return el.slice(0, 2) === key;
        }).length;
                
        counts.push(count);
    }
    
    result.push(counts);
    counts = [];
}

console.log(JSON.stringify(result));
&#13;
&#13;
&#13;

IE < 9的版本,其中没有.filter方法

&#13;
&#13;
var arr = [
    ["00","00","00","01","01","01","01","01","01"],
    ["000","100","01","01","01"]
];

var b = ["00", "01", 10];

var len, 
    key,
    result = [],
    counts = [],
    i, j, k, count;

for (i = 0, len = arr.length; i < len; i++) {    
    for (j = 0; j < b.length; j++) {    	
        count  = 0;        
   	key    = String(b[j]);
        
        for (k = 0; k < arr[i].length; k++) {
            if (arr[i][k].slice(0, 2) === key) {
            	count++;
            }
        }
                
        counts.push(count);
    }
    
    result.push(counts);
    counts = [];
}

console.log(JSON.stringify(result));
&#13;
&#13;
&#13;

答案 1 :(得分:1)

好像你的样本输入中有一些拼写错误。以下代码可能有所帮助。

&#13;
&#13;
var arr = [["00","00","00","01","01","01","01","01","01"],["00","10","01","01","01"]];
var b = ["00","01","10"];
var cc = [];
arr.forEach(function(ar,i){  
  cc[i] = [];
  b.forEach(function(a,j){         
      cc[i][j] = ar.filter(function(d){ return d==a }).length;
  });
});
alert(JSON.stringify(cc));
&#13;
&#13;
&#13;

或者

&#13;
&#13;
var arr = [
  ["00", "00", "00", "01", "01", "01", "01", "01", "01"],
  ["00", "10", "01", "01", "01"]
];
var b = ["00", "01", "10"];
var cc = arr.map(function(ar) {
  return b.map(function(a) {
    return ar.filter(function(d) {
      return d == a
    }).length;
  })
});
alert(JSON.stringify(cc));
&#13;
&#13;
&#13;