javascript سكربت pdf - كيفية تخصيص مساواة الكائنات لمجموعة جافا سكريبت





2 Answers

كما هو مذكور في إجابة jfriend00 ، قد لا يكون تخصيص علاقة المساواة ممكنًا .

تقدم التعليمة البرمجية التالية مخطط تفصيلي للمشكلة حسابياً (ولكن تكلفة الذاكرة):

class GeneralSet {

    constructor() {
        this.map = new Map();
        this[Symbol.iterator] = this.values;
    }

    add(item) {
        this.map.set(item.toIdString(), item);
    }

    values() {
        return this.map.values();
    }

    // ...
}

يجب على كل عنصر مدرج تنفيذ الأسلوب toIdString() الذي يقوم بإرجاع السلسلة. تعتبر كائنين متساوية إذا وفقط إذا كانت أساليب toIdString الخاصة بها toIdString بإرجاع نفس القيمة.

تحميل شرح الدوال

تقدم ES 6 الجديدة (الوئام) كائن Set جديدة. تشبه خوارزمية الهوية المستخدمة بواسطة Set المشغل === وبالتالي فهي غير مناسبة لمقارنة الأشياء:

var set = new Set();
set.add({a:1});
set.add({a:1});
console.log([...set.values()]); // Array [ Object, Object ]

كيفية تخصيص المساواة لكائنات مجموعة من أجل القيام بمقارنة الأشياء العميقة؟ هل هناك أي شيء مثل جافا equals(Object) ؟




ربما يمكنك محاولة استخدام JSON.stringify() للقيام بمقارنة الأشياء العميقة.

فمثلا :

const arr = [
  {name:'a', value:10},
  {name:'a', value:20},
  {name:'a', value:20},
  {name:'b', value:30},
  {name:'b', value:40},
  {name:'b', value:40}
];

const names = new Set();
const result = arr.filter(item => !names.has(JSON.stringify(item)) ? names.add(JSON.stringify(item)) : false);

console.log(result);




Related