我希望在删除前面的重复子字符串时保留逗号分隔字符串的跟随(而不是前面的)重复的子字符串。
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 :(得分: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
将其恢复为字符串。
答案 1 :(得分: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>
如果匹配重复,则可以删除该元素。