Nesneler içeren bir dizinin indeksini almak için en iyi yöntem nedir?
Bu senaryoyu hayal edin:
var hello = {
hello: 'world',
foo: 'bar'
};
var qaz = {
hello: 'stevie',
foo: 'baz'
}
var myArray = [];
myArray.push(hello,qaz);
Şimdi hello
özelliği 'stevie'
olan nesnenin indexOf
değerine sahip olmak istiyorum ki bu örnekte bu değer 1
olacaktır.
JavaScript konusunda oldukça acemiyim ve basit bir yöntem var mı yoksa bunu yapmak için kendi işlevimi mi oluşturmalıyım bilmiyorum.
Array.prototype.findIndex IE (edge olmayan) dışındaki tüm tarayıcılarda desteklenir. Ancak sağlanan polyfill güzel.
var indexOfStevie = myArray.findIndex(i => i.hello === "stevie");
Harita ile çözüm tamamdır. Ancak her aramada tüm dizi üzerinde yineleme yapıyorsunuz. Bu yalnızca bir eşleşme bulunduğunda yinelemeyi durduran findIndex için en kötü durumdur.
var searchTerm = "stevie",
index = -1;
for(var i = 0, len = myArray.length; i < len; i++) {
if (myArray[i].hello === searchTerm) {
index = i;
break;
}
}
veya bir fonksiyon olarak:
function arrayObjectIndexOf(myArray, searchTerm, property) {
for(var i = 0, len = myArray.length; i < len; i++) {
if (myArray[i][property] === searchTerm) return i;
}
return -1;
}
arrayObjectIndexOf(arr, "stevie", "hello"); // 1
Sadece bazı notlar:
Örneğin,
var a = {obj: 0};
var b = [a];
b.indexOf({obj: 0}); // -1 not found