如题,字符串形如:a,b,c,d,e,f,.... 字符串长度未知。但有一个规律就是,元素之间以“,”分隔。现要在js中判断传入的这个字符串中的元素是否有相同的。如 a,b,a,c (有两个a元素) 、 a,b,c,d,c (有两个c元素)。
字符串形如: name,age,address,test,ss,ggg,....
字串长度不固定,元素是单字母还是字符串?
var result = check("an,b,c,d,an,f", 'an');
alert(result);
function check(str, s) {
var start = str.indexOf(s);
var n = str.indexOf(s, start + 1);
if (n > 0) {
return true;
}
return false;
}
@Rich.T:
为避免把111和11认为也相同,最好在调用方法前把两个值前后都加上逗号
check(",an,b,c,d,an,f,", ',an,');
@Rich.T: 兄弟,可能是我表述的不够明白。是这样的。
js中判断给出的一个字符串中是否有相同元素的算法。如:var str='name,age,add,sex,llo,ddt,'; 其中元素之间以逗号分隔。像以上字符串,就没有相同元素。 var str='name,age,name,sex';这种就有一个相同元素name。 我想在只需要写一个js方法,传入要判断的这个字符串,方法运算后,如果传入的这个字符串中,有相同元素就返回某个值,没有相同元素也返回一个值就行了。
不需要传入要查找具体的那个值,如朋友上面方法的'an'元素。
var array = get("an,b,c,d,an,f");
alert(array);
function get(str) {
var array = new Array();
var list = str.split(",");
for (var i = 0; i < list.length; i++) {
var s = list[i];
if (array.indexOf(s) == -1) {
if (check(str, s)) {
array.push(array.length, list[i]);
}
}
}
return array;
}
function check(str, s) {
var start = str.indexOf(s);
var n = str.indexOf(s, start + 1);
if (n > 0) {
return true;
}
return false;
}
@Rich.T: 兄弟,结贴的时候看错了,下次一定多给点分。
遍历一边,然后用类似hash,一样的,记录一下就知道了
如楼上所说,代码如下:
function check(str){ var a = str.split(','),dt={},tmp,i=0,l=a.length; for(; i < l ; i++){ tmp = a[i]; if(tmp.length>0){ if(dt[tmp]){ return true;//true代表有重复的 }else{ dt[tmp]=1; } } } return true;//true代表没有重复的 } check('sdfsdf,aaa,3sdf,w234,aaa');
checkString("aa,bb,cc,dd");
function checkString(str){
var arrStr=str.split(",");
var hash = {};
for(var i=0;i<arrStr.length-1;i++){
if(!hash[arrStr[i]])
{
hash[arrStr[i]]=true;
}
else{
alert("有重复的。");
}
}
alert("没有重复的!");
}
使用正则表达式进行匹配,性能绝对高!