【问题标题】:Removing duplicate elements from array whose elements can vary从元素可以变化的数组中删除重复元素
【发布时间】:2016-04-20 12:02:45
【问题描述】:

我知道以前有人问过类似的问题,但我尝试了所有答案,但没有任何效果。每次点击buttonsclass ognjen 时,我都会创建我的array。所以它看起来像这样:

<button type="button" name="10208823390691752,1317727711586522" value="All contacts" class="btn btn-default ognjen">All contacts</button>
<button type="button" name="10207252567926988,1294280923934896" value="Men" class="btn btn-default ognjen">Men</button>
<button type="button" name="10208823390691752,10207252567926988" value="Women" class="btn btn-default ognjen">Women</button>
<button type="button" name="1317727711586522,1294280923934896" value="Segment 1" class="btn btn-default ognjen">Segment 1</button>

这就是我设法用所有点击元素的值创建一个数组的方法:

$(document).ready(function() {

        var clickedButtons = new Array();
        var numUsers= new Array();
        $('button.ognjen').click(function() {

            var index = clickedButtons.indexOf(this.value);

            if (index === -1){
                clickedButtons.push(this.value);
                numUsers.push(this.name);//value not found so push it
                }else {
                clickedButtons.splice(index, 1);
                numUsers.splice(this.name);// value found so remove it
            }
            var tryIt=numUsers.join();
            var picker=tryIt.split(', ');
            console.log(picker);
});

所以picker 现在是一个数组,在单击某些按钮后可能如下所示:

["10207252567926988,1294280923934896,10208823390691752,1317727711586522,1294280923934896"]

现在,我想从这个数组中删除所有重复的元素。尝试从这些问题中得到答案:

它们都没有奏效。我认为这可能是由于制作这个piker 数组的动态。请帮忙,我整天都在为这个问题苦苦挣扎。

【问题讨论】:

  • numUsers.splice(this.name); 应该是 numUsers.splice(index, 1);
  • 这是一个只有 1 个元素的数组(一个包含许多数字的字符串),因此删除重复项会很困难,因为没有。
  • 按钮没有名称
  • @Arun P Johny,当我之后单击所有联系人和女性时,它不是在制作一个字符串,而是在您的小提琴中制作两个。你能解决这个问题,我认为一切都会正常吗?

标签: javascript jquery arrays


【解决方案1】:

我认为更简单的方法是存储每个按钮的点击状态,然后每次重新创建数组

$(document).ready(function() {

  var clickedButtons = new Array();
  var numUsers = new Array();
  var $btns = $('button.ognjen').click(function() {
    $(this).toggleClass('selected');

    clickedButtons = new Array();
    $btns.filter('.selected').each(function() {
      var values = this.value.split(',');
      values.forEach(function(value) {
        var index = clickedButtons.indexOf(value);
        if (index === -1) {
          clickedButtons.push(value);
        }
      });
    });

    console.log(clickedButtons)
    snippet.log(clickedButtons.join() || 'NONE');
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
<button type="button" value="10208823390691752,1317727711586522" class="btn btn-default ognjen">All contacts</button>
<button type="button" value="10207252567926988,1294280923934896" class="btn btn-default ognjen">Men</button>
<button type="button" value="10208823390691752,10207252567926988" class="btn btn-default ognjen">Women</button>
<button type="button" value="1317727711586522,1294280923934896" class="btn btn-default ognjen">Segment So

【讨论】:

  • 您有指向此 sn-p.js 文件的文档的链接吗?我只是想更好地了解您是如何实现这一目标的。
  • @Ognj3n 是TJ写的一个小工具meta.stackexchange.com/a/242144/134069
猜你喜欢
  • 2017-08-08
  • 2011-07-03
  • 2013-05-20
  • 1970-01-01
  • 2010-10-13
  • 2011-03-22
相关资源
最近更新 更多