一个标签去重的问题

<input class="clvalue" value="3,3,2," name="server">

<input type="button" class="check">

疑问:怎么控制点击 把value中出只要出现两次的就干掉这个数字!!!

 诸如 3,3,2, 然后只剩 2
 诸如 2,3,2, 然后只剩 3
 诸如 3,2,1, 然后 1,2,3
 
 (顺序排,去逗号,去重)
 把正确的结果返回value??
阅读 3.3k
4 个回答
<input class="clvalue" value="3,3,2," name="server">
<button id="j-button" type="button" class="check">Click</button>
<!-- 我给 button 挂个 id="j-button" 来方便获取元素 -->
document.getElementById('j-button').addEventListener('click', function() {
  var input = document.querySelector('input[name="server"]');
  var value = input.value;
  
  // 按照 , 来分割字符串,顺便移除前后空格
  var result = value.split(/\s*,\s*/).filter(function(item) {
    if (item) {
      var index = value.indexOf(item); // 获取字符在字符串中的位置
      // 从字符串结束的位置向后检索,找不到则表示是唯一的
      return value.indexOf(item, index + item.length) === -1;
    } else {
      return false;
    }
  }).sort(); // 最后排个序
  
  input.value = result.join(',');
});
var numObj={};
var $input=$('input[name="server"]');
$input.val().replace(/(\d+),{0,1}/g,function(m,p){
    if(numObj[p]){
        numObj[p]+=1;
    }else{
        numObj[p]=1
    }
});

var numArr=[];
for(var num in numObj){
    if(numObj[num]=1){
        numArr.push(num);
    }
}
$input.val(numArr.sort(function(a,b){return a>b}).join(','));
document.querySelector('.check').addEventListener('click', unique)

function unique() {
    var input = document.querySelector('.clvalue');
    var arr = input.value.split(',');
    var hash = {};
    var newArr = arr.filter(function(item, i) {
        if (item) {
            return arr.indexOf(item) === arr.lastIndexOf(item)
        }
    })
    input.value = newArr.sort(function(a, b) {
        return a - b
    }).join(',')
}
新手上路,请多包涵

value 获取出来split(',')得到一个数组array,用这个array new 一个Set可以去重。然后排序的话用sort可以。最后join(',')

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题