我做了这个小提琴:http://jsfiddle.net/benhowdle89/CANX8/1/
创建一个assoc数组,然后对数组中的值运行测试。达到了错误的结果!
代码概要:
$(document).ready(function(){
var newArray = [];
newArray['first'] = 1;
newArray['second'] = 1;
$('button').click(function(){
if($.inArray(1, newArray) != -1){
$('#dump').css('border', '1px solid red');
} else {
$('#dump').css('border', '1px solid blue');
}
});
});
答案 0 :(得分:2)
var newArray = [];
newArray['first'] = 1;
newArray['second'] = 1;
这不会向数组添加任何元素。您可以看到newArray.length
将为零。
相反,它会将属性first
和second
添加到newArray
。
您可以使用
访问它newArray.first
newArray.second
所以$.inArray
无效
答案 1 :(得分:0)
JavaScript数组的索引是无符号的32位整数,因此您无法使用字符串,请参阅http://andrewdupont.net/2006/05/18/javascript-associative-arrays-considered-harmful/
但是,您可以使用以下内容:
function findPropertyWithValue(obj, val) {
for (var i in obj) {
if (obj.hasOwnProperty(i) && obj[i] === val) {
return i;
}
}
return null;
}
var arr = [];
arr['A string'] = '123';
arr['Another string'] = '456';
alert(findPropertyWithValue(arr, "123")); // 'A string'
答案 2 :(得分:0)
inArray适用于基于整数访问的数组。
var len;
if ( array ) {
if ( indexOf ) {
return indexOf.call( array, elem, i );
}
len = array.length;
i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
for ( ; i < len; i++ ) {
// Skip accessing in sparse arrays
if ( i in array && array[ i ] === elem ) {
return i;
}
}
}
return -1;
jQuery就是这样做的。它不使用for(var i in arr)进行迭代...(当然使用hasOwnProperty验证,它将是;))但只能通过索引访问长度。
正如文档所说:http://api.jquery.com/jQuery.inArray/它类似于原生indexOf方法。看看本机indexOf是这样做的,jQuery遵循类似的行为。