Bagaimana saya bisa mendapatkan indeks objek yang cocok dengan kondisi (tanpa iterate sepanjang array)?
Anda tidak bisa, sesuatu harus diulang melalui array (setidaknya sekali).
Jika kondisinya banyak berubah, maka Anda harus mengulang dan melihat objek di dalamnya untuk melihat apakah mereka cocok dengan kondisinya. Namun, pada sistem dengan fitur ES5 (atau jika Anda menginstal shim), iterasi dapat dilakukan dengan cukup ringkas:
var index;
yourArray.some(function(entry, i) {
if (entry.prop2 == "yutu") {
index = i;
return true;
}
});
Itu menggunakan (ish) baru Array#some
fungsi , yang loop melalui entri dalam array sampai fungsi yang memberikan mengembalikan nilai true. Fungsi yang saya berikan ini menyimpan indeks entri yang cocok, lalu kembali true
untuk menghentikan iterasi.
Atau tentu saja, gunakan a for
lingkaran. Berbagai opsi iterasi Anda tercakup dalam jawaban lain ini .
Tetapi jika Anda akan selalu menggunakan properti yang sama untuk pencarian ini, dan jika nilai properti unik, Anda dapat mengulangi sekali saja dan membuat objek untuk memetakannya:
var prop2map = {};
yourArray.forEach(function(entry) {
prop2map[entry.prop2] = entry;
});
(Atau, sekali lagi, Anda bisa menggunakan for
loop atau salah satunya opsi lain .)
Maka jika Anda perlu menemukan entri prop2 = "yutu"
, Anda dapat melakukan ini:
var entry = prop2map["yutu"];
Saya menyebutnya "lintas-pengindeksan" array. Secara alami, jika Anda menghapus atau menambah entri (atau mengubah prop2
nilainya), Anda perlu memperbarui objek pemetaan Anda juga.
0
?). Kedua solusi melakukan lebih iterasi dari yang dibutuhkan, yang kurang dari ideal jika array besar (meskipun kemungkinan itu menjadi manusia begitu besar akan melihat yang rendah, kecuali pencarian yang terjadi a lot ).