-2

我正在使用 $.inArray 来检查值是否在数组中。如果不是我想添加它,否则什么也不做。

var arrayValues = [1];

for (var i = 1; i <= 3; i++) {

    if($.inArray('1', arrayValues) === -1) {

        arrayValues.push(0+i);  

    }

}

我在 ajax 页面加载时获取数据,因为在第二次加载时我在第三次加载时valuesArray = [value, value2];得到 valuesArray ,我再次得到它仍然将它推到as 。valuesArray = [value, value2, value3, value4];valuevaluesArrayvaluesArray = [value, value2, value3, value4, value];

谁能解释我做错了什么?

谢谢!

请参阅jsfiddle的实时示例。

4

2 回答 2

2

您的问题是您1在数组中添加数字但检查字符串是否存在"1"。它们不等于$.inArray.

你可以这样做:

if($.inArray(1, arrayValues) === -1) { // <- test with a number, not a string
    arrayValues.push(0+i); // note that the 0+ here is useless
}

While1=='1'和使用 as 的测试1!=='1'可以在源代码中看到:$.inArray===

inArray: function( elem, arr, i ) {
    var len;

    if ( arr ) {
        if ( core_indexOf ) {
            return core_indexOf.call( arr, elem, i );
        }

        len = arr.length;
        i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;

        for ( ; i < len; i++ ) {
            // Skip accessing in sparse arrays
            if ( i in arr && arr[ i ] === elem ) {
                return i;
            }
        }
    }

    return -1;
},

更多关于==vs=== 在 MDN 上的信息。

于 2013-07-10T09:34:46.033 回答
0

您的代码示例从不调用$.inArray. 它有语法错误,因为有多个未闭合的括号。

if($.inArray('value', valuesArray) === -1) {

    valuesArray.push(value);  

}
于 2013-07-10T09:02:05.650 回答