繁体   English   中英

如何检查数组是否包含多个相同单词之一

[英]how to check if array contains more then one of the same word

我正在制作标签系统,但无法弄清楚如何防止用户向同一标签发送垃圾邮件。 我唯一的想法是将每个添加到数组中。 并且一旦他们再次单击它就不再添加它,但是我无法弄清楚。 如果有人可以帮助,那就太好了!

这是我的代码示例:

<select multiple="multiple" size="10" id="tag_name">
   <option>apple</option>
   <option>pear</option>
   <option>pineapple</option>
   <option>peach</option>
   <option>strawberry</option>
   <option>raspberry</option>
   <option>cherry</option>
   <option>watermelon</option>
   <option>orange</option>
   <option>banana</option>
   <option>grape</option>
   <option>honeydew</option>
   <option>apricot</option>
</select>
<!-- appended tags wrapper -->
<div class="tags"></div>
<script type="text/javascript">
   var tag_count = 0;
   var tag_array = "";
   $("#tag_name").click(function(){
      var tag = $("#tag_name").val();
      if(!tag == ""){
         tag_array = tag_array+tag+", ";
         tag_count = tag_count+1;
         if(????){
            if(tag_count != 11){
               $(".tags").append("<div style=\"margin: 5px;\" class=\"tag\"><p>"+tag+"</p><a href=\"#\">x</a></div>");
            } else {
               $(".tags").append("<div style=\"margin: 5px;\" class=\"tag\"><p>15 tags already selected!</p><a href=\"#\">x</a></div>");
               $("#tag_name").attr("disabled","disabled");
            }
         }
      }
   });
</script>

怎么样String.indexOf()

if (tag_count != 11 && -1 === tag_array.indexOf(tag)) {
  tag_array += tag + ", ";
  tag_count = ++;
  $(".tags").append("<div style=\"margin: 5px;\" class=\"tag\"><p>" + tag + "</p><a href=\"#\">x</a></div>");
} else {
  ..
}

实现这一目标的最简单的方法是只建立的HTML .tagschange了的情况下select 然后,您可以在每次更改时简单地重建整个列表。 由于一个元素只能被选择一次,因此不能重复。 尝试这个:

 $("#tag_name").change(function() { var values = $(this).val(); if (values.length > 10) { $('.tags').html('<div class="tag"><p>15 tags already selected!</p><a href="#">x</a></div>'); } else { var tagsHtml = values.map(function(v) { return '<div class="tag"><p>' + v + '</p><a href="#">x</a></div>'; }).join(''); $('.tags').html(tagsHtml); } }); 
 .tag { margin: 5px; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <select multiple="multiple" size="10" id="tag_name"> <option>apple</option> <option>pear</option> <option>pineapple</option> <option>peach</option> <option>strawberry</option> <option>raspberry</option> <option>cherry</option> <option>watermelon</option> <option>orange</option> <option>banana</option> <option>grape</option> <option>honeydew</option> <option>apricot</option> </select> <div class="tags"></div> 

注意使用'作为外部字符串定界符。 这避免了对内部双引号使用丑陋的转义字符。

您那里没有Arrray,只有一个字符串在其中连接了新值。

但是,您仍然可以在此处使用.includes()

更好的选择是使用数组,然后查看您尝试添加的值是否存在。

所以改变:

var tag_array = ""var tag_array = [];

tag_array = tag_array+tag+", "; tag_array.push(tag) ;

然后,您可以执行tag_array.includes(tag)来查看标签是否存在于数组中。 但是我建议您在将值插入数组之前进行检查,否则它将始终为真。 文档

如果以后需要逗号分隔的标记字符串,则可以执行

tag_array.join(', ');

您应该尝试使用Set而不是Array。 这样,每个条目都是唯一的。

 const set1 = new Set(["Apple", "Orange"]); set1.add("Apple"); console.log(Array.from(set1)); 

以下代码将完成这项工作!

 var tag_count = 0; var tag_array = []; $("#tag_name").click(function(){ var tag = ""+$("#tag_name").val(); if(!tag == ""){ if(tag_array.indexOf(tag) < 0){ tag_array.push(tag); tag_count = tag_count+1; console.log(tag_array); if(tag_count != 11){ $(".tags").append("<div style=\\"margin: 5px;\\" class=\\"tag\\"><p>"+tag+"</p><a href=\\"#\\">x</a></div>"); } else { $(".tags").append("<div style=\\"margin: 5px;\\" class=\\"tag\\"><p>15 tags already selected!</p><a href=\\"#\\">x</a></div>"); $("#tag_name").attr("disabled","disabled"); } }else{ console.log("Alredy Tagged - "+tag); } } }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <select multiple="multiple" size="10" id="tag_name"> <option>apple</option> <option>pear</option> <option>pineapple</option> <option>peach</option> <option>strawberry</option> <option>raspberry</option> <option>cherry</option> <option>watermelon</option> <option>orange</option> <option>banana</option> <option>grape</option> <option>honeydew</option> <option>apricot</option> </select> 

for(i = 0; i< MyArray.length(); i++){
    for(j = 0; j< MyArray.length(); j++){
        if (i != j){
            if(new String(MyArray[i]).valueOf() == new String(MyArray[j]).valueOf()){
                return i;
            }
        }
    }
}

如果您知道它们是字符串,则无需检查类型。( MyArray[i]) == MyArray[j])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM