2015-04-01 77 views
0

我希望保留后面的(与前面相反)逗号分隔的字符串的重复子字符串,同时删除前面的重复子字符串。jQuery 2.1 |删除重复子字符串的源字符串

1- 重复之前串的初始状态所附

AAA,BBB,CCC,DDD,EEE

2- BBB动态附加到字符串

AAA,BBB ,ccc,ddd,eee,bbb

3- 此前必须删除bbb

aaa,ccc,ddd,eee,bbb

下面的函数或任何函数如何能够再现我所寻找的?

function unique(list) { 
    var result = []; 
    $.each(list, function(i, e) { 
    if ($.inArray(e, result) == -1) { 
result.push(e); 
} 
    }); 
    return result; 
} 
+0

你想从字符串中删除什么... – 2015-04-01 16:40:42

+0

我认为你可能想阅读这样的东西:http://stackoverflow.com/questions/1960473/unique-values-in-an-array – 2015-04-01 16:43:59

+0

我只需要从字符串中删除前面的重复项。所有示例和链接都显示删除以下重复的方法。 – koolness 2015-04-01 17:16:31

回答

2

的快速简便的方法是刚刚扭转阵列,使用重复去除功能,然后反向回:

function unique(list) { 
 
    var result = []; 
 
    $.each(list, function(i, e) { 
 
    if ($.inArray(e, result) == -1) { 
 
     result.push(e); 
 
    } 
 
    }); 
 
    return result; 
 
} 
 

 
var arr = ["aaa", "bbb", "ccc", "ddd", "eee", "bbb"]; 
 

 
console.log(unique(arr.reverse()).reverse());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

有可能的方式来做到这一点具有更好的性能,但相对较小的阵列,这应该没问题。

你还提到这是一个字符串(尽管你的函数在数组上工作)。如果它是一个字符串,则需要使用split将其拆分成一个数组,然后在重复删除后将其返回到字符串,然后使用join

+0

为什么我们需要扭转它? – mohamedrias 2015-04-01 17:42:47

+0

@mohamedrias现有的函数保留第一个重复项并删除所有其他项。反过来使它保持最后的重复按要求。 – 2015-04-01 17:44:34

+0

请检查我的答案,它删除没有:) :) – mohamedrias 2015-04-01 17:45:05

0

你的功能需要是这样的:

function unique(list) { 
 
     $.each(list, function(index, val) { 
 
     if(list.indexOf(val) !== list.lastIndexOf(val)) { 
 
      list.splice(list.indexOf(val),1);   
 
     } 
 
     }); 
 
     return list; 
 
} 
 
var string = "aaa,bbb,ccc,ddd,eee,bbb"; 
 
var arr = string.split(","); 
 

 
document.querySelector("#results").innerHTML = unique(arr).join(",")
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"> 
 
</script> 
 
<div id="results"></div>

如果匹配重复的,那么它可以只是删除该元素。