2014-06-23 50 views
0

是否可以讓一個數組的元素在JavaScript中告訴它的位置?如果可能的話,當你有一個對象數組並且需要在對象字符串中調用一個方法時它可能會派上用場。您可以將其索引作爲方法參數傳遞,但似乎很麻煩並且可能不必要。在JavaScript中獲取數組元素索引

理想的情況下,這將是這樣的:

function ArrayType(){ 

    this.showIdentity = function(){ 
     alert(this.indexOf()); // This obviously doesn't work, but I'm looking for 
           // a method that will return the index of "this" 
           // in its parent array. 
    } 
} 

var myArray = new Array(); 

myArray[0] = new ArrayType; 
myArray[1] = new ArrayType; 
myArray[1].showIdentity(); // Should alert "1" 

會有人知道sollution這個問題(而不是沿着通過指數與方法等)?

回答

0

你可以這樣說:

function ArrayType(parent){ 
    var p = parent; 
    this.showIdentity = function(){ 
     alert(p.indexOf(this)); 
    } 
} 

var myArray = new Array(); 

myArray[0] = new ArrayType(myArray); 
myArray[1] = new ArrayType(myArray); 
myArray[1].showIdentity(); // 1 

這使要素的父母,使他們能夠發現自己在其父母的參考。

+0

謝謝,這已經工作得更好。 –

0

indexOf方法實際上是Array.prototype一部分,所以你應該從你的陣列對象調用它,而不是從實際的對象:

function ArrayType(){ 

    this.showIdentity = function(){ 
     console.log(myArray.indexOf(this)); 
    }; 

}; 

var myArray = new Array(); 

myArray[0] = new ArrayType(); 
myArray[1] = new ArrayType(); 

myArray[0].showIdentity(); 

這應該工作。

如果你想有不同的陣列,我可以想到兩種解決方案。首先是簡單地傳遞要用作參考的陣列,讓對象數組中問它的指數:

function ArrayType(){ 

    this.showIdentity = function(array){ 

     console.log(array.indexOf(this)); 

    }; 
}; 

var myArray  = new Array(); 
var mySecondArray = new Array(); 

var a = new ArrayType(); 
var a2 = new ArrayType(); 

myArray.push(a, a2); 
mySecondArray.push(a2, a); 

a.showIdentity(myArray); // 0 
a.showIdentity(mySecondArray); // 1 

二。將一個方法添加到Array原型而不是它是該方法的對象內:

Array.prototype.findIndex = function(object) { 
    console.log(this.indexOf(object)); 
}; 

function ArrayType(){}; 

var myArray  = new Array(); 
var mySecondArray = new Array(); 

var a = new ArrayType(); 
var a2 = new ArrayType(); 

myArray.push(a, a2); 
mySecondArray.push(a2, a); 

myArray.findIndex(a); // 0 
myArray.findIndex(a2); // 1 

當然,原型路線只有在你想要做更多的東西,而不是獲得索引的情況下有效。如果你只是想索引,indexOf應該是足夠的。