2013-05-09 15 views
4

我有三個字符串,其中包含逗號分隔的數字。檢查多個字符串包含使用javascript的對方

var str1 = "1,5,3"; 
var str2 = "2,5,1"; 
var str3 = "3,2,1,5"; 

我想託運這三串彼此(要獲得所有的公共元素)
預計輸出

var result = 1,5; 

如果我只有兩根弦,這是我的邏輯已經使用

var array = str2.split(','); 
for(var item in array) { 
var contains = (str1.indexOf(array[item]) > -1); 
if(contains == 1) { 
    var result = array[item]+','; 
    getele2 += result; 
    geteleresult = getele2.replace(/\,$/, ''); 
    } 
} 
alert(geteleresult); 

但是,當多個字符串被檢查我不知道如何應用這些排序邏輯。任何想法,請您幫助 感謝...

回答

1

你可以試試這個功能和邏輯:

function findCommon() { 
    var nums = {}; 
    var args_length = arguments.length; 
    for (var i = 0; i < args_length; i++) { 
     var cur_arg = arguments[i]; 
     var cur_found = {}; 

     var cur_arg_split = cur_arg.split(","); 
     for (var j = 0; j < cur_arg_split.length; j++) { 
      var cur_val = cur_arg_split[j]; 
      if (!(cur_val in cur_found)) { 
       cur_found[cur_val] = 1; 
       if (!(cur_val in nums)) { 
        nums[cur_val] = 0; 
       } 
       nums[cur_val]++; 
      } 
     } 
    } 

    var ret = []; 
    for (var key in nums) { 
     if (nums[key] === args_length) { 
      ret.push(key); 
     } 
    } 
    return ret; 
} 

DEMO:http://jsfiddle.net/LkEyj/1/

它允許您將任意數量的變量(包含以逗號分隔的數字的字符串)傳遞給該函數。

0

您可以使用indexOf()方法

var str1 = "1,5,3"; 
var str2 = "2,5,1"; 
var str3 = "3,2,1,5"; 

var array1 = str1.split(','); 
var array2 = str2.split(','); 
var array3 = str3.split(','); 
var output = []; 
for(var i=0;i<array1.length;i++) 
{ 
    if(array2.indexOf(array1[i]) >= 0 && array3.indexOf(array1[i]) >= 0) 
     output.push(array1[i]); 
} 
alert(output); 

JS Fiddle

+0

原因downvote ...? – 2013-05-09 04:55:27

+0

@prashanth這對我來說很好。不知道爲什麼這是投票。 – HaBo 2013-05-09 05:02:38

+0

@HaBo我有一些仇敵在這裏誰downvote所有我的答案 – 2013-05-09 05:04:00

0

可以將該值存儲陣列內,然後應用的.sort()方法來排序值。

var str1 = "1,5,3"; 
var str2 = "2,5,1"; 
var str3 = "3,2,1,5"; 
var getele2=""; 
var rarray = new Array(); 
var array = str2.split(','); 
for(var item in array) { 
var contains = (str1.indexOf(array[item]) > -1); 
if(contains == 1){ 
var result = array[item]; 
rarray.push(result); 
} 
} 
alert(rarray.sort()); 

這裏是小提琴: Demo

http://jsfiddle.net/jvaibhav/BsFPW/

+0

我懷疑這是否適用於像'11, 2,3'和'1,22,33,4' – HaBo 2013-05-09 04:59:37

+0

@HaBo:同意。但操作系統將字符串和預期輸出分隔開來,所以我發佈了這個。 – 2013-05-09 05:02:00

+0

可接受。它適用於給定的場景,雖然 – HaBo 2013-05-09 05:05:05

0

如果您可以將字符串存儲在數組中以啓動它,那將是最容易的。如果你能這樣做,以下應該做的伎倆。如果不需要更改,這也可以擴展以檢查三個以上。

str[0] = "1,5,3"; 
str[1] = "2,5,1"; 
str[2] = "3,2,1,5"; 

var matches = ''; 
for(var i=0;i<str.length-1;i++) { 
    if(i==0) 
     var str1 = str[i].split(','); 
    else 
     var str1 = matches.split(','); 
    var str2 = str[i+1].split(); 
    var newMatches = ''; 
    for(var item in str2) { 
     var contains = (str1.indexOf(array[item]) > -1); 
     if(contains == 1) { 
      var result = array[item]+','; 
      newMatches += result; 
     } 
    } 
    matches = newMatches.replace(/\,$/, ''); 
} 

return matches; 
1

什麼這個簡單的方法:

function common() { 
    var arg = [].slice.call(arguments), 
     com = [], i; 

    for (i = 1; i < arg.length; i++) { 
     com = arg[i].match(RegExp((com.length ? com : arg[0].split(',')).join('|'), 'g')); 
    } 

    return com; 
} 

http://jsfiddle.net/tUvWM/

這很簡單,並支持任意數量的字符串。例如。

var arr = common(str1, str2, str3, str4); 
+0

真棒但太遲.... !!! – 2013-05-09 05:16:15

0

你可以調用一個函數recursively-

你找到共同的前兩個字符串的元素後,

比較公地到下一個字符串,等等,

儘可能多的參數傳遞給函數。

如果所有字符串都包含兩個以逗號分隔的'5',則此示例將返回兩個'5's。 (他們不需要數字,字符串將工作一樣。)

function inCommon(s1, s2){ 
    var L1= s1.length, L2= s2.length, rx, 
    A1, next, next1, next2, least, common= []; 
    A1= (L1<= L2)? s1.split(','):s2.split(','); 

    for(var i= 0, L= A1.length; i<L; i++){ 
     next= A1[i]; 
     rx= RegExp('(^|,)'+next+'(,|$)', 'g'); 
     next1= (s1.match(rx) || []).length; 
     next2= (s2.match(rx) || []).length; 
     least= Math.min(next1, next2); 
     while(least--) common.push(next); 
    } 
    if(arguments.length>2 && common.length){ 
     var a= common.slice.call(arguments, 2); 
     a.unshift(common.join(',')); 
     return inCommon.apply(window, a); 
    } 
    return common; 
} 
var str1= "1,5,3"; 
var str2= "2,5,1"; 
var str3= "3,2,1,5"; 

inCommon(str1, str2, str3) 

/* returned value: (Array) 
1,5 
*/ 
相關問題