2015-10-17 96 views
1

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

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的。

+0

无法理解的逻辑,什么是'[ 3,6,0]'和'[1,3,1]'代表? – Saar

+0

'arr [0]'包含3'00','01'为6和'10'与0相同'arr [1]' – htoniv

+0

现在有任何疑问@Saar – htoniv

回答

2

正如你在b10你需要将其转换为String,然后在阵列搜索,因为arr含有唯一的字符串

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++) {  \t 
 
     count = 0;   
 
    \t key = String(b[j]); 
 
     
 
     count = arr[i].filter(function (el) { 
 
     \t  return el.slice(0, 2) === key; 
 
     }).length; 
 
       
 
     counts.push(count); 
 
    } 
 
    
 
    result.push(counts); 
 
    counts = []; 
 
} 
 

 
console.log(JSON.stringify(result));

版本为IE < 9,那里没有.filter方法

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++) {  \t 
 
     count = 0;   
 
    \t key = String(b[j]); 
 
     
 
     for (k = 0; k < arr[i].length; k++) { 
 
      if (arr[i][k].slice(0, 2) === key) { 
 
      \t count++; 
 
      } 
 
     } 
 
       
 
     counts.push(count); 
 
    } 
 
    
 
    result.push(counts); 
 
    counts = []; 
 
} 
 

 
console.log(JSON.stringify(result));

+0

谢谢@Alexander完美的解决方案。 – htoniv

1

似乎在您的示例输入中有一些错字。以下代码可能会有帮助

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));

或者

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));

+0

谢谢你gilsha – htoniv

相关问题