使用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
*/