2014-11-21 56 views
0

我有2個字符串這樣seprate值

var a= '12,13,14,15,16'; 
var b='p,q,q,p,q'; 

我只需要這樣的12,15表示對 和13,14,16表示q

我怎樣才能做到這一點jQuery的/ JavaScript的。

+1

這背後的邏輯。獲得前兩個值,其餘的? – vaso123 2014-11-21 10:19:07

+0

@lolka_bolka index in a = index in b – Vladimirs 2014-11-21 10:19:29

+0

我只想分離p和q's.their對應的數字也可以在var a = '12,13,14,15,16'; – aniltc 2014-11-21 10:20:55

回答

0

簡單,因爲這:

var a= '12,13,14,15,16'; 
var b='p,q,q,p,q'; 

var pValues=[], qValues=[]; //where to store the results 

b.split(',').forEach(function(value, index){ //split the values from the b var 
    var aa=a.split(',');      //split the values from the a var 
    if(value=='p') pValues.push(aa[index]); 
    if(value=='q') qValues.push(aa[index]); 
}); 
console.log("pValues: "+pValues); 
console.log("qValues: "+qValues); 
2

var a = '12,13,14,15,16'; 
var b = 'p,q,q,p,q'; 
var as = a.split(","); 
var bs = b.split(","); 

if(as.length == bs.length) 
{ 
    var map = {}; 
    for(var i = 0; i < as.length; ++i) 
    { 
    var asv = as[i]; 
    var bsv = bs[i]; 
    map[asv] = bsv; 
    } 
    console.log(map['13']); //q 
} 

或:

var a = '12,13,14,15,16'; 
var b = 'p,q,q,p,q'; 
var as = a.split(","); 
var bs = b.split(","); 

if(as.length == bs.length) 
{ 
    var map = {}; 
    as.map(function(asv,idx){ 
    return {asv:asv, bsv:bs[idx]}; 
    }) 
    .forEach(function(x){ 
    map[x.asv] = x.bsv; 
    }); 
    console.log(map['13']); //q 
} 

在回答您的意見,也許這樣的事情會更好:

var a = '12,13,14,15,16'; 
var b = 'p,q,q,p,q'; 
var as = a.split(","); 
var bs = b.split(","); 

if(as.length == bs.length) 
{ 
    var map = {}; 
    as.map(function(asv,idx){ 
    return {asv:asv,bsv:bs[idx]}; 
    }) 
    .forEach(function(x){ 
    if(!map[x.bsv]) 
    { 
     map[x.bsv]=[]; 
    } 
    map[x.bsv].push(x.asv); 
    }); 
    console.log(map['q']); //["13", "14", "16"] 
    console.log(map['q'].join(",")); //"13,14,16" 
} 
+0

我不能分開爲2個字符串 - 12,15代表p和13,14,16代表q – aniltc 2014-11-21 10:31:30

+0

@aniltc ..所以你正在做一個「group by」。看我的編輯 – spender 2014-11-21 10:36:55

0
var a= '12,13,14,15,16'; 
var b='p,q,q,p,q'; 

function getRepresentative(srcA, srcB, valA) 
{ 
    var mapIndexA = srcA && srcA.split(',').indexOf(valA); 
    var mapB = srcB.split(','); 


    return mapB && mapB[mapIndexA] || -1; 
} 

console.log(getRepresentative(a,b, '15')); 

該函數返回-1,如果A和B之間不存在對應的地圖被發現..

0

以下函數採用兩個字符串,並用逗號分割它們,然後逐個遍歷符號 - 令牌對。每當發現一個新符號時,它將被添加到symbols,並將一個空數組添加到symbolToNumbers,以便可以將該符號的數字推送到該數組上。

最後,我們可以遍歷symbols來顯示每個符號的數字列表。此代碼適用於各種符號,而不僅僅是'p'和'q'。

function findElements(numbers, symbols) { 
    var numberTokens = numbers.split(','), 
     symbolTokens = symbols.split(','), 
     symbolToNumbers = {}, 
     symbols = [], 
     n = numberTokens.length; 
    if (n != symbolTokens.length) { 
     console.log('error: the lists must have the same length'); 
     return; 
    } 
    for (var i = 0; i < n; ++i) { 
     var number = numberTokens[i], 
      symbol = symbolTokens[i]; 
     if (symbolToNumbers[symbol] === undefined) { 
      symbols.push(symbol); 
      symbolToNumbers[symbol] = []; 
     } 
     symbolToNumbers[symbol].push(number); 
    } 
    for (var i = 0; i < symbols.length; ++i) { 
     var symbol = symbols[i], 
      numbers = symbolToNumbers[symbol]; 
     console.log(symbol+': '+numbers.join(', ')); 
    } 
} 

var a = '12,13,14,15,16'; 
var b = 'p,q,q,p,q'; 
findElements(a, b); 

查看此代碼上的jsfiddle運行:http://jsfiddle.net/0e1g2ryf/1/