[英]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 .tags
于change
了的情况下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.