2013-05-09 14 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 
*/ 
相关问题