比如:对于字符串var str=[abc,bac,cab],只保留只中一组,也就是说将字符串中只要内容相同而不管字符顺序的字符删除。
方法一:
function test1(){
var arr=new Array("abc",'acdfb',"bac","acb",'acfdb','ffda');
var arrtemp=new Array();
for(var i=0;i<arr.length;i++){
var _arr=arr[i].split('');
_arr=_arr.sort();
arrtemp[i]=_arr.join('');
}
for(var i=0;i<arrtemp.length;i++){
for(var j=i+1;j<arrtemp.length;j++){
if(arrtemp[i]==arrtemp[j]){arr.splice(j,1);arrtemp.splice(j--,1);}
}
}
var rt='Source:'+arr.toString()+'<br / >';
rt+='Rusult:'+arrtemp.toString();
var objshow=document.getElementById("showresult");
objshow.innerHTML=rt;
}
方法二:
<script >
function ord(a, b){
return a.charCodeAt()-b.charCodeAt();
}
function order(arr){
var tmpArr=[], len = arr.length;
for(var i=0; i<len; i++)tmpArr.push(arr[i].split('').sort(ord).join(''));
var tmp = [], num=[];
par:
for(var i=0; i<len; i++){
var str = tmpArr[i];
for(var n=0; n<tmp.length; n++){
if(tmp[n]==str) continue par;
}
tmp.push(str);
num.push(i);
}
var newArr = [], len = tmp.length;
for(var i=0; i<len; i++) newArr.push(arr[num[i]]) // 刚刚这里用错Array了
return newArr;
}
var arr = ['意中她', '中意她', 'aasds123', '232', 'abcd', 'bcda', '223'];
alert(order(arr));
</script >
方法三:
<script type="text/javascript" >
<!--
// 判断2个字符串是否相等
function equals(s1, s2)
{
if (s1.length !=s2.length)
{
return false;
}
for (var i=0; i<s1.length; i++)
{
var c = s1.charAt(i);
if (s2.indexOf(c) == -1)
{
return false;
}
}
return true;
}
// 过滤重复数据的数组
function filter(arr)
{
var newArr = new Array();
var count = -1;
var flag = true;
for (var i=arr.length-1; i >-1; i--)
{
var s = arr.pop();
for (var j=arr.length-1; j >-1; j--)
{
if (equals(s, arr[j]))
{
flag = false;
break;
}
}
if (flag)
{
newArr[++count] = s;
}
flag = true;
}
return newArr;
}
//-- >
</script >
<script type="text/javascript" >
var arr = new Array('小白兔', '兔白小', '123', '232', 'abcd', 'bcda','OK');
var newArr = filter(arr);
document.write(newArr.toString());
</script >
方法四:利用正则
JScript codevar a=["abc","bac","acb","123","132","321","456","457"];var map={},result=[];for(var i=0,len=a.length;i<len;i++){
map[a[i].split("").sort().join("")]=null;
}for(var keyin map){
result.push(key);
}
alert(result);
方法五:
<script type="text/javascript" >
var r = ['abc','bac','acb','aa','bc','试一下','下一试'];
var r2 = [],a = {},s = '';
for(var i in r){
s = r[i].replace(/((?!^).)/g,',$1').split(',').sort();
if (!a[s]){a[s] = true;r2.push(r[i]);}
}
alert(r2);
</script >
方法六:
<script language="javascript" type="text/javascript" >
//实现功能。没有性能优化。
function test1(){
var arr=new Array("abc",'acdfb',"bac","acb",'acfdb','ffda',"abc","abc","abc","abc","abc","abc");
var arrtemp=new Array();
var rt='OldArr:'+arr.toString()+'<br / >';
for(var i=0;i<arr.length;i++){
var _arr=arr[i].split('');
_arr=_arr.sort();
arrtemp[i]=_arr.join('');
}
for(var i=0;i<arrtemp.length;i++){
for(var j=i+1;j<arrtemp.length;j++){
if(arrtemp[i]==arrtemp[j]){arr.splice(j,1);arrtemp.splice(j--,1);}
}
}
rt+='Source:'+arr.toString()+'<br / >';
rt+='Rusult:'+arrtemp.toString();
var objshow=document.getElementById("showresult");
objshow.innerHTML=rt;
}
</script >
方法七:两万个数据,在JS里859毫秒完成
<SCRIPT LANGUAGE="JavaScript" >
function Hashtable()
{
this._hash = new Object(); // 创建Object对象
//哈希表的添加方法
this.add = function(key,value){
if(typeof(key)!="undefined"){
if(this.contains(key)==false){
this._hash[key]=typeof(value)=="undefined"?null:value;
return true;
} else {
return false;
}
} else {
return false;
}
}
//哈希表的移除方法
this.remove = function(key){delete this._hash[key];}
//哈希表内部键的数量
this.count = function(){var i=0;for(var k in this._hash){i++;} return i;}
//通过键值获取哈希表的值
this.items = function(key){return this._hash[key];}
//在哈希表中判断某个值是否存在
this.contains = function(key){ return typeof(this._hash[key])!="undefined";}
//清空哈希表内容的方法
this.clear = function(){for(var k in this._hash){delete this._hash[k];}}
}
//myhash.add("name","张三"); //添加键和值
//alert(myhash.items("name")); //根据指定键显示哈希表的值
//alert(myhash.contains("name")); //根据指定键显示哈希表的值
//产生测试数据,这期间的代码不算在内
var myArr=new Array();
var totalStr=20000; //两万个数据
var totalLength=0;
for(i=0;i <totalStr;i++)
{
var tempStr="";
var tempLength=Math.ceil(3* Math.random()+3);
for(j=0;j <tempLength;j++)
{
var tempCharCode;
//tempCharCode=Math.ceil(14380*Math.random() +21834);//用几乎全部汉字测试
tempCharCode=Math.ceil(30*Math.random() +21834);//用少数30个汉字测试
//tempCharCode=Math.ceil(26*Math.random() +96);//用a-z英文测试
tempStr+=String.fromCharCode(tempCharCode);
}
totalLength+=tempLength;
myArr.push(tempStr);
}
//测试开始
var jsBegin = new Date().getTime(); //开始时间
var myhash=new Hashtable(); //创建哈希表
for (i = 0; i < myArr.length;i++ )
{
//alert(myArr[i]);
var charArr= myArr[i].split("");
charArr.sort();
if (!myhash.contains(charArr))
{
continue;
}
else
{
!myhash.Add(add, true);
}
}
var jsEnd = new Date().getTime(); //结束时间
alert("总共" + totalStr+ " 个数据,总长度"+ totalLength +",连显示在内做完需要" + (jsEnd - jsBegin) + "毫秒");
</SCRIPT >
s