ฉันจะทำให้ดัชนีของวัตถุนั้นตรงกับเงื่อนไขได้อย่างไร (โดยไม่มีการวนซ้ำตามอาร์เรย์)
คุณไม่สามารถมีสิ่งที่ต้องทำซ้ำผ่านอาร์เรย์ (อย่างน้อยหนึ่งครั้ง)
หากเงื่อนไขเปลี่ยนแปลงไปมากคุณจะต้องวนลูปและดูวัตถุในนั้นเพื่อดูว่าตรงกับเงื่อนไขหรือไม่ อย่างไรก็ตามในระบบที่มีฟีเจอร์ ES5 (หรือถ้าคุณติดตั้งชิม) การทำซ้ำนั้นสามารถทำได้ค่อนข้างรัดกุม:
var index;
yourArray.some(function(entry, i) {
if (entry.prop2 == "yutu") {
index = i;
return true;
}
});
ที่ใช้Array#some
ฟังก์ชั่นใหม่ (ish) ซึ่งวนรอบรายการในอาร์เรย์จนฟังก์ชั่นที่คุณให้มันกลับเป็นจริง ฟังก์ชั่นที่ฉันให้ไว้จะบันทึกดัชนีของรายการที่ตรงกันจากนั้นกลับtrue
สู่การหยุดการวนซ้ำ
หรือแน่นอนเพียงแค่ใช้for
วง ตัวเลือกการวนซ้ำแบบต่างๆของคุณครอบคลุมอยู่ในคำตอบอื่น ๆนี้
แต่ถ้าคุณมักจะใช้คุณสมบัติเดียวกันสำหรับการค้นหานี้เสมอและหากค่าคุณสมบัติไม่ซ้ำกันคุณสามารถวนซ้ำเพียงครั้งเดียวและสร้างวัตถุเพื่อจับคู่กับวัตถุเหล่านี้:
var prop2map = {};
yourArray.forEach(function(entry) {
prop2map[entry.prop2] = entry;
});
(หรืออีกครั้งคุณสามารถใช้การfor
วนซ้ำหรือตัวเลือกอื่น ๆ ของคุณ )
จากนั้นถ้าคุณต้องการค้นหารายการด้วยprop2 = "yutu"
คุณสามารถทำได้:
var entry = prop2map["yutu"];
ฉันเรียกสิ่งนี้ว่า "การสร้างดัชนีข้าม" โดยธรรมชาติถ้าคุณลบหรือเพิ่มรายการ (หรือเปลี่ยนprop2
ค่าของพวกเขา) คุณจะต้องปรับปรุงวัตถุการทำแผนที่ของคุณเช่นกัน
0
?) ทั้งการแก้ปัญหาการทำมากขึ้นย้ำกว่าที่จำเป็นซึ่งน้อยกว่าเหมาะถ้าอาร์เรย์ที่มีขนาดใหญ่ (แม้ว่าราคาของมันเป็นมนุษย์ขนาดใหญ่เพื่อจะแจ้งให้ทราบที่ต่ำเว้นแต่การค้นหาจะเกิดขึ้นจำนวนมาก )