ค้นหาคีย์ที่มีค่าอาเรย์โดยการเปรียบเทียบเชิงลึกแทนความเท่าเทียมกันอย่างเข้มงวดใน ES6 Map [ซ้ำกัน]

ฉันกำลังอยู่ระหว่างการย้ายโค้ดบางส่วนที่ใช้ไลบรารี hashmap ไปยัง ES6 แผนที่ อย่างไรก็ตาม ฉันประสบปัญหาที่แผนที่ที่มีอยู่ของฉันถูกคีย์ด้วยอาร์เรย์ ถึงเวลาค้นหา อาร์เรย์ที่เทียบเท่าจะถูกสร้างขึ้นและใช้เป็นคีย์การค้นหา การใช้ HashMap ถือว่าใช้ได้ เนื่องจากคีย์ที่ซับซ้อนถูกแฮชในลักษณะที่เทียบเท่ากับการเปรียบเทียบเชิงลึก ในทางกลับกัน Map ของ ES6 จะทำการเปรียบเทียบความเท่าเทียมกันอย่างเข้มงวดบนคีย์

วิธีเก่าของฉันในการค้นหาคีย์:

var h = new HashMap();
var k = [1,2,3];
h.set(k, 'foo');
h.has([1,2,3]) // returns true

ภายใต้ ES6 วิธีการนั้นใช้ไม่ได้ผลเนื่องจากมีการเปรียบเทียบความเท่าเทียมกันอย่างเข้มงวด

var m = new Map();
var k = [1,2,3];
m.set(k, 'foo');
m.has([1,2,3]) // returns false

มีวิธีการบังคับฟังก์ชันการเปรียบเทียบที่กำหนด หรือโอเวอร์โหลด get() ในลักษณะที่จะค้นหาคีย์ที่ซับซ้อนด้วยการเปรียบเทียบเชิงลึกแทนที่จะเป็นความเท่าเทียมกันที่เข้มงวดหรือไม่ ฉันไม่สามารถสร้างคลาสย่อย Map ที่ทำเช่นนั้นได้หากไม่มีการค้นหาเชิงเส้นผ่านคีย์ ซึ่งทำลายประสิทธิภาพที่ได้รับจากการใช้ประเภทเนทิฟตั้งแต่แรกโดยสิ้นเชิง


person sehrgut    schedule 12.09.2016    source แหล่งที่มา
comment
ไม่ น่าเสียดายที่ไม่มี   -  person Bergi    schedule 12.09.2016
comment
ขอบคุณสำหรับการหลอกลวง! ฉันดูที่นี่มาประมาณครึ่งชั่วโมงแล้ว และไม่ได้ค้นหาแฮชตามบริบท ดังนั้นฉันจึงพลาดไปโดยสิ้นเชิง   -  person sehrgut    schedule 12.09.2016
comment
ใช่แล้ว สำหรับแฮชแมป คุณไม่เพียงแต่ต้องมีฟังก์ชันความเท่าเทียมแบบกำหนดเองเท่านั้น แต่ยังต้องมีวิธีการแฮชด้วย และ JS ก็ไม่มี :-/   -  person Bergi    schedule 12.09.2016
comment
ฉันเดาว่าฉันกำลังติดอยู่กับ lib ของบุคคลที่สามแล้ว... /me ยกเลิกการเปลี่ยนแปลง   -  person sehrgut    schedule 12.09.2016