inArray没有按预期工作

时间:2016-05-10 13:51:55

标签: jquery

我无法弄清楚我做错了什么。为什么这不是真的?我缺少什么

Aspnet_wp.exe

4 个答案:

答案 0 :(得分:0)

您需要将第一个元素更改为字符串,以便您搜索的值和数组中的值是相同的数据类型



var suppliers = ["13419", "12999", "13992"];
var id = 13419;

$.inArray(String(id), suppliers) != -1 ? console.log('duplicate') : console.log('no dupe');

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

其他选项是将数组中的每个元素更改为数字

&#13;
&#13;
var suppliers = ["13419", "12999", "13992"].map(e => {return parseInt(e)});
var id = 13419;

$.inArray(id, suppliers) != -1 ? console.log('duplicate') : console.log('no dupe');
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

你的id是整数

 var id = 13419;

而你的arry包含

字符串
 var suppliers = ["13419", "12999", "13992"];

所以按照

字符串给出它
 var id = "13419";

答案 2 :(得分:0)

jQuery使用===来确定项目是否相等。因此它采用帐户变量类型,因此您必须在检查之前更改ID类型:

if ($.inArray(id.toString(), suppliers) != -1) {
  console.log('duplicate');
} else {
  console.log('no dupe');
}

或创建自己的功能:

function customInArray(needle, heystack) {
    for (item in heystack) {
            if (needle == heystack[item]) {
                return item; 
        }
    }

    return -1;
}

答案 3 :(得分:0)

尝试更改supplierid数据类型。

var suppliers = [13419, 12999, 13992];

选中此JSFiddle