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을 반환하는 이유는 무엇입니까?
개체의 평등 테스트가 참조 평등을 기반으로하기 때문에이 방법은 작동하지 않습니다. the 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
이 답변은 하향 투표를받을 자격이 없으며 100 % 정확합니다. 다른 (현재) 대답은 upvotes 자격이되지 않습니다 - 그것은 100 % 올바르지 않습니다. – Alnitak
그것은 항상 -1 하나의 객체들이 동일한 데이터를 포함하는 경우에도, 다른 객체에 결코 동일하기 때문이다. 이 규칙에 대한 유일한 예외는 배열에 저장된 객체가 참조로 저장되고 테스트하려는 객체가 동일한 객체에 대한 참조 일 때입니다. 이 경우 문자 그대로 같은 대상이됩니다. –