检查多个输入是否具有相同值的最佳方法

时间:2016-06-27 01:12:25

标签: javascript php jquery html json

我有一些输入(随机数> 0),每个都在同一个类的div中,所以我有这个结构:

<div class="myclass"> <!-- div #1 -->
    <input name="name" class="input">
    <!-- other inputs that don't take care -->
</div>
...
<div class="myclass"> <!-- div #n -->
    <input name="name" class="input">
    <!-- other inputs that don't take care -->
</div>

我需要检查每个输入的值是否与其他输入不匹配,所以如果我在第一个输入myname中输入 n 中的值,我就不能有myname

我有下一个JQuery代码来迭代所有div以提取有关每个div的信息。

$('.myclass').each(function() {
    input = $(this).find('input[name="name"]').val();
});

然后,它通过jQuery ajax将所有信息(之前解析过的JSON)发送到PHP脚本,这些脚本必须重新验证输入值不相等。

所以,问题是:什么是最好的方法来检查所有div并知道价值是否重复?我想在每个内部制作一个$ .each,我必须迭代所有元素,但我不知道它的性能。

那么使用PHP脚本,最好的方式是什么? 谢谢。

注意:JSON解析数组,现在具有以下结构:

{"user_info":{"app_id":0,"user_id":0},"contact":{"has_contact":0},"menu_items":[{"position":0,"name":"Nosotros","icon_id":"ic_delete_black_48dp.png","content":"nosotros"},{"position":1,"name":"Precios","icon_id":"ic_help_black_48dp.png","content":"nosotros"}]}

不要担心“user_info”和“has_contact”它们无关,我正在谈论的名称是menu_items [index] ['name']值。

3 个答案:

答案 0 :(得分:1)

您可以使用$.map().slice()$.unique().length

// return `input` values
var inputs = $.map($(".myclass input"), function(el) {return el.value});
// check if `unique` array `.length` is equal to `unique` array `.length`
var unique = $.unique(inputs.slice(0)).length === inputs.length;

console.log(inputs, unique);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="myclass"> <!-- div #1 -->
    <input name="name" class="input" value="abc">
    <!-- other inputs that don't take care -->
</div>
...
<div class="myclass"> <!-- div #n -->
    <input name="name" class="input" value="abc">
    <!-- other inputs that don't take care -->
</div>

答案 1 :(得分:0)

另一种方法(代码示例未显示...)是创建一个散列,其中每个接收到的值如果它是一个字符串或者可以明确强制成一个......)是关键,而不关心价值就是价值。

以空哈希开头。对于每个输入,测试哈希中是否存在与该输入匹配的键。如果是这样,你就有了一个骗局。如果没有,请将输入添加为新密钥。 (相关值并不重要......)检查完所有输入后,可以丢弃哈希值。

(这种策略适用于任何支持哈希的编程语言......现在,这些都是&#34;所有这些都是。&#34;原则上,它也是计算多少次的有效方式任何特定元素都会出现。)

警告:当输入值的数据类型与底层集合类型的数据类型不同时,不要使用此技术,在JavaScript中(仅)#34;字符串&#34;并且有任何可能性,你认为两个输入是&#34;不同的&#34;可以被强制转换为相同的(字符串)键值。该算法将无法区分它们。

答案 2 :(得分:0)

如果我必须使用PHP,我会使用array_unique()函数....