jQuery 2.1 |删除重复子字符串的源子字符串

时间:2015-04-01 16:36:44

标签: javascript jquery

我希望在删除前面的重复子字符串时保留逗号分隔字符串的跟随(而不是前面的)重复的子字符串。

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;
}

2 个答案:

答案 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>

如果匹配重复,则可以删除该元素。