كيفية العثور على التكرارات في مجموعة أزواج القيمة الرئيسية Sais.js
-
20-12-2019 - |
سؤال
لدي مجموعة على النحو التالي.
[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);
إذا كنت بحاجة إلى الاحتفاظ بالمفاتيح في كائناتك، فمن المحتمل أنك تفعل شيئًا خاطئًا.يجب أن تفكر في إعادة هيكلة التعليمات البرمجية الخاصة بك.