"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > #LearnedToday: Object.groupBy()

#LearnedToday: Object.groupBy()

تم النشر بتاريخ 2024-11-01
تصفح:135

#LearnedToday: Object.groupBy()

؟ لقد خرج أخيرًا! لم تعد هناك حاجة لكتابة تعليمات برمجية قبيحة لتجميع مجموعة من الكائنات حسب قيمة محددة للحقل!

منذ أواخر عام 2023، هناك طريقة ثابتة رسمية للكائن تسمى groupBy() تقوم بذلك نيابةً عنا!
فهو يقبل عنصرًا قابلاً للتكرار، مثل المصفوفة، ووظيفة يتم تنفيذها لكل عنصر ويجب أن يُرجع "فئة" ذلك العنصر المحدد.
تقوم الطريقة بإرجاع كائن جديد حيث يكون كل مفتاح عبارة عن فئة مختلفة تحتوي على مجموعة من الكائنات التي تنتمي إلى تلك الفئة المحددة.

ملاحظة: العناصر الموجودة في الكائن الذي تم إرجاعه والعنصر الأصلي القابل للتكرار هي نفسها (وليست نسخًا عميقة!). سوف ينعكس تغيير البنية الداخلية للعناصر في كل من الكائن الأصلي القابل للتكرار والكائن الذي تم إرجاعه.

مثال

دعونا نعطي مثالا عمليا لنرى مدى سهولة تجميع جميع شخصيات سلاحف النينجا حسب العمر.

المصفوفة الأولية

const ninjaTurtlesCharacters = [
  { age: 16, name: 'Michelangelo' },
  { age: 16, name: 'Raffaello' },
  { age: 16, name: 'Donatello' },
  { age: 16, name: 'Leonardo' },
  { age: 91, name: 'Splinter' },
  { age: 25, name: 'Casey Jones' },
  { age: 25, name: 'April O\'Neil' }
];

الطريقة القديمة الجيدة (مع تقليل)

const ninjaTurtlesCharactersByAge = ninjaTurtlesCharacters.reduce(
  (groupedPeople, item) => ({
    ...groupedPeople,
    [item.age]: groupedPeople[item.age]
      ? [...groupedPeople[item.age], item]
      : [item],
  }),
  {}
);

الطريقة الحديثة

const ninjaTurtlesCharactersByAgeNew = Object.groupBy(
  ninjaTurtlesCharacters,
  ({ age }) => age
);

نصيحة: استخدم Map.groupBy() إذا كنت تريد إرجاع خريطة بدلاً من كائن

النتيجة

{
  "16": [
    { age: 16, name: 'Michelangelo' },
    { age: 16, name: 'Raffaello' },
    { age: 16, name: 'Donatello' },
    { age: 16, name: 'Leonardo' }
  ],
  "25": [
    { age: 25, name: 'Casey Jones' },
    { age: 25, name: 'April O\'Neil' }
  ],
  "91": [
    { age: 91, name: 'Splinter' }
  ]
}

تجريبي

؟؟‍؟ كالعادة، قمت بإنشاء مشروع Stackblitz بسيط للعب بالرمز.

؟ المستندات: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/groupBy

ℹ دعم المتصفح: https://caniuse.com/mdn-javascript_builtins_object_groupby

بيان الافراج يتم استنساخ هذه المقالة على: https://dev.to/danielzotti/LearnedToday-ObjectGroupby-4KL9؟1 إذا كان هناك أي انتهاك ، فيرجى الاتصال بـ [email protected] لحذفه.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3