การแฮชอาร์เรย์ที่แตกต่างกันของออบเจ็กต์ JSON จะได้รับค่าแฮชที่เหมือนกันสำหรับทุกคน

ฉันกำลังพยายามแฮชอาร์เรย์ของวัตถุ JSON แต่ด้วยเหตุผลบางอย่าง hasd ที่สร้างขึ้นไม่เปลี่ยนแปลงในบางกรณี

ตัวอย่างเหล่านี้ได้รับการทดสอบใน nodejs โดยใช้แพ็คเกจอัลกอริทึมการแฮช sha256

arr1 = [{a: 1}];
sha(arr1);
'6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d'

arr2 = [{a: 1, b:2}]
sha(arr2);
'6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d'

arr3 = [{a: 1111111111111}];
sha(arr3);
'6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d'

ดังที่คุณเห็นว่าอาร์เรย์ทั้งหมดมีค่าแฮชที่สร้างเหมือนกันแม้ว่าจะมีคุณสมบัติต่างกันก็ตาม

arr4 = [{a: 1}, {b: 2}];
sha(arr4);
'96a296d224f285c67bee93c30f8a309157f0daa35dc5b87e410b78630a09cfc7'

อันนี้มีแฮชที่แตกต่างกันเพราะมันมีสองวัตถุแทนที่จะเป็นเพียงอันเดียว

ดังนั้นคำถามของฉันกำลังจะเข้าใจว่ามีอะไรผิดปกติกับสามอาร์เรย์แรก หากฉันต้องการแฮชที่แตกต่างกันของแต่ละรายการ


person wilson    schedule 12.10.2018    source แหล่งที่มา
comment
การทราบว่าแพ็คเกจ (หรือภายใน) ใดที่ให้ฟังก์ชัน sha ของคุณน่าจะเป็นประโยชน์   -  person rlemon    schedule 12.10.2018
comment
ฉันพนันได้เลยว่ามันเป็นแค่การทำ sha('[object object]') หรืออะไรก็ตามที่แสดงสตริงทั่วไปของวัตถุ เช่นบางทีคุณควรเปลี่ยนวัตถุของคุณให้เป็น json ก่อนที่จะแฮช   -  person Nate    schedule 12.10.2018


คำตอบ (1)


วิธีการ sha() ของคุณอาจคาดหวังสตริงและจะพิมพ์วัตถุของคุณไปที่ String:

arr1 = [{a: 1}];
sha(arr1);

arr2 = [{a: 1, b:2}]
sha(arr2);

arr3 = [{a: 1111111111111}];
sha(arr3);

arr4 = [{a: 1}, {b: 2}];
sha(arr4);

function sha(v) {
  console.log(v.toString());
}

ดังนั้นหากคุณต้องการแฮชจากออบเจ็กต์เหล่านี้ คุณจะต้องแปลงสิ่งเหล่านี้ให้เป็นสตริงอย่างถูกต้อง เช่น โดยการเข้ารหัสเป็นสตริง JSON ก่อน

person Kaiido    schedule 12.10.2018