var myWidth = 20;
var myHeight = 30;
allDims = [
{w: 20, h: 30},
{w: 10, h: 15}
]
if ($.inArray({w: myWidth, h: myHeight}, allDims) !== -1) {
...
}
为什么 if 条件总是返回 -1?
var myWidth = 20;
var myHeight = 30;
allDims = [
{w: 20, h: 30},
{w: 10, h: 15}
]
if ($.inArray({w: myWidth, h: myHeight}, allDims) !== -1) {
...
}
为什么 if 条件总是返回 -1?
这不起作用,因为对象的相等性测试基于引用的相等性。
来自MDN:
对于严格或抽象比较,两个不同的对象永远不会相等
因此,您必须自己实现索引搜索,通过循环和比较w
和h
。
例如 :
var index = -1;
for (var i=0; i<allDims.length; i++) {
if (allDims[i].w==myWidth && allDims[i].h==myHeight) {
index = i;
break;
}
}
如果你想要更优雅的东西,你可以使用filter
并传递一个函数,但即使不需要它也会遍历整个数组。indexOf
可以设计一个类似于但采用回调来检查相等性的通用函数:
Array.prototype.indexFunc = function(o, equal) {
for (var i=0; i<this.length; i++) {
if (equal(o,this[i])) return i;
}
return -1;
}
console.log(allDims.indexFunc({w:10, h:15}, function(a,b) {
return a.w==b.w && a.h==b.h
})); // logs 1