كيفية العثور على التكرارات في مجموعة أزواج القيمة الرئيسية Sais.js

StackOverflow https://stackoverflow.com//questions/23002403

سؤال

لدي مجموعة على النحو التالي.

[emails] => Array (
   [0] => Array (
      [a] => a@a.com
      [is_verified_a] => 1
    )
   [1] => Array (
      [b] => a@a.com
      [is_verified_b] => 1
   )
),

أحتاج إلى العثور على نسخ مكررة في هذه المصفوفة، ولكن المفاتيح مختلفة، أي أن a وb لهما نفس البريد الإلكتروني "a@a.com".

على سبيل المثال، يجب عليك التحقق من التكرارات في هذه المصفوفة وتحتاج فقط إلى القيمة "a@a.com" في متغير منفصل.هل هناك أي طريقة لمعرفة ذلك باستخدام _.uniq أو أي وظائف الشرطة السفلية الأخرى؟

الرجاء المساعدة. شكرا جزيلا.

هل كانت مفيدة؟

المحلول

ما تريد القيام به غير واضح.ومع ذلك، بما أنك تستخدم JavaScript، فيجب أن تبدو المصفوفة كما يلي:

var emails = [
    {
        email: "a@a.com",
        verified: true,
        key: "a"
    },
    {
        email: "a@a.com",
        verified: true,
        key: "b"
    }
];

ليس من المنطقي ترميز المفاتيح في كائناتك بشكل منفصل (خاصة في أسماء الخصائص).

لإزالة التكرارات من مصفوفة، يمكننا إنشاء ملف عام removeDuplicatesBy وظيفة:

function removeDuplicatesBy(comparator, array) {
    var length = array.length;
    var unique = [];

    for (var i = 0; i < length; i++) {
        var element = array[i];
        var isUnique = true;

        for (var j = 0; j < i; j++) {
            if (comparator(element, array[j])) {
                isUnique = false;
                break;
            }
        }

        if (isUnique) unique.push(element);
    }

    return unique;
}

الآن يمكننا إزالة التكرارات في emails المصفوفة على النحو التالي:

var uniqueEmails = removeDuplicatesBy(function (a, b) {
    return a.email === b.email && a.verified === b.verified;
}, emails);

إذا كنت بحاجة إلى الاحتفاظ بالمفاتيح في كائناتك، فمن المحتمل أنك تفعل شيئًا خاطئًا.يجب أن تفكر في إعادة هيكلة التعليمات البرمجية الخاصة بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top