Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript检查多个字符串是否相互包含_Javascript_For Loop_Foreach - Fatal编程技术网

使用javascript检查多个字符串是否相互包含

使用javascript检查多个字符串是否相互包含,javascript,for-loop,foreach,Javascript,For Loop,Foreach,我有三个字符串,其中包含逗号分隔的数字 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[

我有三个字符串,其中包含逗号分隔的数字

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);
但是当检查多个字符串时,我不知道如何对这些字符串应用排序逻辑。有什么想法吗?请帮忙 谢谢…

您可以使用这个方法

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输出=[];

对于(var i=0;i

可以将值存储在数组中,然后应用.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());
这是小提琴:


您可以尝试以下功能和逻辑:

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;
}
函数findCommon(){
var nums={};
var args_length=arguments.length;
对于(变量i=0;i
演示:


它允许您将任意数量的变量(包含逗号分隔数字的字符串)传递给函数。

如果可以将字符串存储在一个数组中开始,这将是最简单的。如果可以这样做,下面的操作应该可以完成。如果需要,也可以在不做任何更改的情况下缩放检查三个以上

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;
str[0]=“1,5,3”;
str[1]=“2,5,1”;
str[2]=“3,2,1,5”;
var匹配=“”;
对于(var i=0;i-1);
如果(包含==1){
变量结果=数组[项]+',';
newMatches+=结果;
}
}
matches=newMatches.replace(/\,$/,'');
}
返回比赛;

这个简单的方法怎么样:

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

可以递归调用函数-

找到前两个字符串的公共元素后

将commons与下一个字符串进行比较,依此类推

用于传递给函数的参数数量

如果所有字符串都包含两个逗号分隔的“5”,则此示例将返回两个5。 (它们不必是数字,字符串也可以使用。)

普通函数(s1、s2){
变量L1=s1.长度,L2=s2.长度,rx,
A1,next,next1,next2,least,common=[];

A1=(L1我怀疑这是否适用于像“11,2,3”和“1,22,33,4”这样的字符串@HaBo:Agree.但是请指定字符串和预期的输出,所以我发布了此消息。@HaBo:任何方式谢谢。对于通用情况索引()正如prashant回答的那样,方法很好。@prashanth这对我来说很好。不知道为什么这被否决了。@HaBo我这里有一些憎恨我的人,他们曾经对我所有的答案投反对票。我们都有过这样的经历:)@HaBo我想他们嫉妒我们:)
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;
}
var arr = common(str1, str2, str3, str4);
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
*/