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#some
işlevini kullanır . Verdiğim işlev, eşleşen girişin dizinini kaydeder, ardından true
yinelemeyi durdurmak için geri döner .
Veya elbette, sadece bir for
dö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 for
dö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 prop2
değ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 ).