Bir koşulla eşleşen nesnenin dizinini nasıl alabilirim (dizi boyunca yineleme olmadan)?
Yapamazsınız , bir şey dizi boyunca yinelenmelidir (en az bir kez).
Koşul çok değişirse, o zaman döngüye girip içindeki nesnelere bakıp koşulla eşleşip eşleşmediklerini görmeniz gerekir. Bununla birlikte, ES5 özelliklerine sahip bir sistemde (veya bir şim yüklerseniz), yineleme oldukça kısaca yapılabilir:
var index;
yourArray.some(function(entry, i) {
if (entry.prop2 == "yutu") {
index = i;
return true;
}
});
Bu, verdiğiniz işlev true değerine dönene kadar dizideki girdiler arasında dolaşan new (ish) Array#someişlevini kullanır . Verdiğim işlev, eşleşen girişin dizinini kaydeder, ardından trueyinelemeyi durdurmak için geri döner .
Veya elbette, sadece bir fordöngü kullanın . Çeşitli yineleme seçenekleriniz bu diğer yanıtta ele alınmıştır .
Ancak bu arama için her zaman aynı özelliği kullanacaksanız ve özellik değerleri benzersizse, yalnızca bir kez döngü oluşturabilir ve bunları eşlemek için bir nesne oluşturabilirsiniz:
var prop2map = {};
yourArray.forEach(function(entry) {
prop2map[entry.prop2] = entry;
});
(Veya yine bir fordöngü veya diğer seçeneklerinizden herhangi birini kullanabilirsiniz .)
Ardından, girişi bulmanız prop2 = "yutu"gerekirse bunu yapabilirsiniz:
var entry = prop2map["yutu"];
Ben buna "çapraz indeksleme" dizisi diyorum. Doğal olarak, girişleri kaldırır veya eklerseniz (veya prop2değerlerini değiştirirseniz ), eşleme nesnenizi de güncellemeniz gerekir.
0?). Her iki çözüm de gerektiğinden daha fazla yineleme yapar, bu da dizi büyükse idealden daha azdır (aramalar çok fazla olmadıkça, bir insanın fark edeceği kadar büyük olma ihtimali düşüktür ).