2015-10-17 131 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

相關問題