D3.js 5 - collection

d3-collection




d

هياكل البيانات المفيدة للعناصر مرتبط السلسلة.

تثبيت

إذا كنت تستخدم NPM ، npm install d3-collection . خلاف ذلك ، قم بتنزيل أحدث إصدار . يمكنك أيضًا التحميل مباشرةً من d3js.org ، إما كمكتبة مستقلة أو كجزء من D3 4.0 . يتم دعم بيئات AMD و CommonJS و vanilla. في الفانيليا ، يتم تصدير d3 العالمية:

<script src="https://d3js.org/d3-collection.v1.min.js"></script>
<script>

var map = d3.map()
    .set("foo", 1)
    .set("bar", 2);

</script>

جرب مجموعة d3 في متصفحك.

مرجع API

شاء

نوع البيانات الشائع في JavaScript هو الصفيف الترابطي ، أو ببساطة الكائن الذي يحتوي على مجموعة من الخصائص المسماة. الآلية القياسية للتكرار على المفاتيح (أو أسماء الخصائص) في صفيف اقتران هي لـ ... في الحلقة . ومع ذلك ، لاحظ أن ترتيب التكرار غير معرف. يوفر D3 عدة طرق لتحويل الصفائف الترابطية إلى صفائف قياسية مع فهارس رقمية.

كلمة تحذير: من المغري استخدام كائنات عادية كخرائط ، لكن هذا يسبب سلوكًا غير متوقع عند استخدام أسماء الخصائص المدمجة كمفاتيح ، مثل object["__proto__"] = 42 و "hasOwnProperty" in object . إذا لم تستطع ضمان أن تكون مفاتيح الخريطة وقيم المجموعة آمنة ، فاستخدم Maps Sets (أو ما يعادلها ES6) بدلاً من الكائنات العادية.

D3. مفاتيح ( كائن ) Source

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

D3. القيم ( الكائن ) Source

إرجاع صفيف يحتوي على قيم خصائص الكائن المحدد (صفيف اقتران). ترتيب الصفيف الذي تم إرجاعه غير معرف.

D3. إدخالات ( كائن ) Source

إرجاع صفيف يحتوي على مفاتيح الخصائص وقيم الكائن المحدد (صفيف اقتران). كل إدخال هو كائن له سمة وقيمة ، مثل {key: "foo", value: 42} . ترتيب الصفيف الذي تم إرجاعه غير معرف.

d3.entries({foo: 42, bar: true}); // [{key: "foo", value: 42}, {key: "bar", value: true}]

خرائط

مثل خرائط ES6 ، ولكن مع بعض الاختلافات:

D3. خريطة ([ كائنمفتاح ]]) Source

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

var map = d3.map([{name: "foo"}, {name: "bar"}], function(d) { return d.name; });
map.get("foo"); // {"name": "foo"}
map.get("bar"); // {"name": "bar"}
map.get("baz"); // undefined

انظر أيضا Nests .

الخريطة . لديه ( مفتاح ) Source

إرجاع صحيح إذا وفقط إذا كانت هذه الخريطة تحتوي على إدخال لسلسلة المفاتيح المحددة. ملاحظة: قد تكون القيمة null أو undefined .

الخريطة . الحصول على ( مفتاح ) Source

إرجاع القيمة لسلسلة المفاتيح المحددة. إذا لم يكن للخريطة إدخال للمفتاح المحدد ، undefined .

الخريطة . ضبط ( مفتاح ، قيمة ) Source

يضبط قيمة سلسلة المفاتيح المحددة. إذا كانت الخريطة تحتوي سابقًا على إدخال لنفس سلسلة المفاتيح ، فسيتم استبدال الإدخال القديم بالقيمة الجديدة. إرجاع الخريطة ، مما يسمح بالسلاسل. فمثلا:

var map = d3.map()
    .set("foo", 1)
    .set("bar", 2)
    .set("baz", 3);

map.get("foo"); // 1
الخريطة . إزالة ( مفتاح ) Source

إذا كانت الخريطة بها إدخال لسلسلة المفاتيح المحددة ، فقم بإزالة الإدخال وإرجاع true. خلاف ذلك ، هذه الطريقة لا تفعل شيئا وتعود كاذبة.

الخريطة . واضح () Source

يزيل جميع المدخلات من هذه الخريطة.

الخريطة . مفاتيح () Source

إرجاع مجموعة من مفاتيح السلسلة لكل إدخال في هذه الخريطة. ترتيب المفاتيح التي تم إرجاعها تعسفي.

الخريطة . القيم () Source

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

الخريطة . إدخالات () Source

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

الخريطة . كل ( وظيفة ) Source

تستدعي الوظيفة المحددة لكل إدخال في هذه الخريطة ، لتمرير قيمة الإدخال ومفتاحه كوسائط ، متبوعة بالخريطة نفسها. إرجاع غير محدد. ترتيب التكرار تعسفي.

الخريطة . فارغة () Source

تُرجع هذه الأرقام إذا كانت هذه الخريطة تحتوي على إدخالات صفر.

الخريطة . حجم () Source

إرجاع عدد الإدخالات في هذه الخريطة.

موعات

مثل مجموعات ES6 ، ولكن مع بعض الاختلافات:

D3. ضبط ([ مجموعةملحق ]]) Source

يبني مجموعة جديدة. إذا تم تحديد صفيف ، يضيف الصفيف المحدد من قيم السلسلة إلى المجموعة التي تم إرجاعها. الصفيف المحدد قد يكون أيضًا مجموعة أخرى. قد يتم تحديد وظيفة ملحق اختيارية ، أي ما يعادل استدعاء array.map (accessor) قبل إنشاء المجموعة.

ضبط . له ( قيمة ) Source

إرجاع صحيح إذا وفقط إذا كانت هذه المجموعة تحتوي على إدخال لسلسلة القيمة المحددة.

ضبط . إضافة ( القيمة ) Source

يضيف سلسلة القيمة المحددة لهذه المجموعة. إرجاع المجموعة ، مما يسمح بالسلاسل. فمثلا:

var set = d3.set()
    .add("foo")
    .add("bar")
    .add("baz");

set.has("foo"); // true
ضبط . إزالة ( القيمة ) Source

إذا كانت المجموعة تحتوي على سلسلة القيمة المحددة ، فقم بإزالتها وإرجاع true. خلاف ذلك ، هذه الطريقة لا تفعل شيئا وتعود كاذبة.

ضبط . واضح () Source

يزيل كل القيم من هذه المجموعة.

ضبط . القيم () Source

إرجاع صفيف قيم السلسلة في هذه المجموعة. ترتيب القيم التي تم إرجاعها تعسفي. يمكن استخدامها كوسيلة ملائمة لحساب القيم الفريدة لمجموعة من السلاسل. فمثلا:

d3.set(["foo", "bar", "foo", "baz"]).values(); // "foo", "bar", "baz"
ضبط . كل ( وظيفة ) Source

يستدعي الوظيفة المحددة لكل قيمة في هذه المجموعة ، ويمر القيمة على أنها الوسيطتين الأوليين (للتماثل مع map.each ) ، متبوعة بالمجموعة نفسها. إرجاع غير محدد. ترتيب التكرار تعسفي.

ضبط . فارغة () Source

إرجاع صحيح إذا وفقط إذا كانت هذه المجموعة تحتوي على قيم صفرية.

ضبط . حجم () Source

إرجاع عدد القيم في هذه المجموعة.

أعشاش

يسمح التداخل بتجميع العناصر في صفيف في بنية شجرة هرمية ؛ فكر في الأمر مثل عامل التشغيل GROUP BY في SQL ، إلا أنه يمكنك الحصول على مستويات متعددة من التجميع ، والإخراج الناتج عبارة عن شجرة بدلاً من جدول مسطح. يتم تحديد المستويات في الشجرة بواسطة الوظائف الرئيسية. يمكن فرز العقد الورقية للشجرة حسب القيمة ، في حين يمكن فرز العقد الداخلية حسب المفتاح. ستؤدي وظيفة مجموعة التحديثات الاختيارية إلى طي العناصر الموجودة في كل عقدة ورقة باستخدام دالة ملخص. يمكن إعادة استخدام عامل التداخل (الكائن الذي تم إرجاعه بواسطة nest ) ، ولا يحتفظ بأي إشارات إلى البيانات المتداخلة.

على سبيل المثال ، ضع في اعتبارك بنية البيانات الجدولية التالية لعوائد الشعير ، من مواقع مختلفة في مينيسوتا خلال الفترة 1931-2:

var yields = [
  {yield: 27.00, variety: "Manchuria", year: 1931, site: "University Farm"},
  {yield: 48.87, variety: "Manchuria", year: 1931, site: "Waseca"},
  {yield: 27.43, variety: "Manchuria", year: 1931, site: "Morris"},
  ...
];

لتسهيل التصور ، قد يكون من المفيد تداخل العناصر أولاً حسب السنة ، ثم بالتنوع ، كما يلي:

var entries = d3.nest()
    .key(function(d) { return d.year; })
    .key(function(d) { return d.variety; })
    .entries(yields);

هذا إرجاع صفيف متداخلة. كل عنصر من عناصر الصفيف الخارجي هو زوج قيم مفتاح ، يسرد قيم كل مفتاح متميز:

[{key: "1931", values: [
   {key: "Manchuria", values: [
     {yield: 27.00, variety: "Manchuria", year: 1931, site: "University Farm"},
     {yield: 48.87, variety: "Manchuria", year: 1931, site: "Waseca"},
     {yield: 27.43, variety: "Manchuria", year: 1931, site: "Morris"}, ...]},
   {key: "Glabron", values: [
     {yield: 43.07, variety: "Glabron", year: 1931, site: "University Farm"},
     {yield: 55.20, variety: "Glabron", year: 1931, site: "Waseca"}, ...]}, ...]},
 {key: "1932", values: ...}]

يسمح النموذج المتداخل بسهولة التكرار وإنشاء هياكل هرمية في SVG أو HTML.

للحصول على مقدمة أطول للتداخل ، راجع:

D3. عش () Source

ينشئ مشغل عش جديد. مجموعة المفاتيح فارغة في البداية.

عش . مفتاح ( مفتاح ) Source

يسجل وظيفة رئيسية جديدة. سيتم استدعاء الوظيفة الأساسية لكل عنصر في صفيف الإدخال ويجب أن تُرجع معرف سلسلة لتعيين العنصر إلى مجموعته. في معظم الأحيان ، تكون الوظيفة عبارة عن أداة وصول بسيطة ، مثل السنة ووحدات الوصول المتنوعة أعلاه. ( لا يتم تمرير وظائف المفاتيح في فهرس صفيف الإدخال.) في كل مرة يتم فيها تسجيل مفتاح ، يتم دفعه إلى نهاية الصفيف الداخلي للمفاتيح ، ويطبق مشغل التداخل مستوى إضافي من التداخل.

عش . sortKeys ( المقارنة ) Source

فرز القيم الأساسية للمفتاح الحالي باستخدام دالة المقارنة المحددة ، مثل d3.ascending أو d3.descending . إذا لم يتم تحديد مقارنة للمفتاح الحالي ، فسيتم تحديد الترتيب الذي سيتم إرجاع المفاتيح به. على سبيل المثال ، لفرز السنوات بترتيب تصاعدي والأصناف بترتيب تنازلي:

var entries = d3.nest()
    .key(function(d) { return d.year; }).sortKeys(d3.ascending)
    .key(function(d) { return d.variety; }).sortKeys(d3.descending)
    .entries(yields);

لاحظ أن هذا يؤثر فقط على نتيجة nest.entries ؛ ترتيب المفاتيح التي يتم إرجاعها بواسطة nest.map و nest.object غير معروف دائمًا ، بغض النظر عن المقارنة.

عش . sortValues ( المقارنة ) Source

فرز عناصر الأوراق باستخدام دالة المقارنة المحددة ، مثل d3.ascending أو d3.descending . هذا يكافئ تقريبًا فرز صفيف الإدخال قبل تطبيق عامل التداخل ؛ ومع ذلك ، فإنه عادة ما يكون أكثر كفاءة لأن حجم كل مجموعة أصغر. إذا لم يتم تحديد مقارنة قيمة ، فسيتم إرجاع العناصر بالترتيب الذي ظهرت به في صفيف الإدخال. وهذا ينطبق على nest.map . nest.entries ، nest.object . nest.object . nest.object .

عش . تراكمي ( وظيفة ) Source

يحدد وظيفة مجموعة التحديثات التي سيتم تطبيقها على كل مجموعة من عناصر الورقة. سيتم استبدال قيمة الإرجاع للدالة التراكمية صفيف قيم الأوراق في الصفيف الترابطي الذي تم إرجاعه بواسطة nest.map أو nest.object ؛ بالنسبة لـ nest.entries ، فإنه يستبدل إدخال الورقة. القيم بإدخال .value. إذا تم تحديد مقارنة ورقة ، يتم فرز عناصر الورقة قبل استدعاء وظيفة مجموعة التحديثات.

عش . خريطة ( مجموعة ) Source

يطبق عامل التداخل على المصفوفة المحددة ، مع إرجاع map متداخلة. يتوافق كل إدخال في الخريطة التي تم إرجاعها مع قيمة مفتاح مميزة يتم إرجاعها بواسطة وظيفة المفتاح الأول. تعتمد قيمة الإدخال على عدد وظائف المفاتيح المسجلة: إذا كان هناك مفتاح إضافي ، فستكون القيمة خريطة أخرى ؛ وإلا ، فإن القيمة هي صفيف العناصر التي تمت تصفيتها من صفيف الإدخال الذي يحتوي على قيمة المفتاح المحدد. إذا لم يتم تحديد أي مفاتيح ، فتُرجع مجموعة الإدخال.

عش . كائن ( مجموعة ) Source

يطبق عامل التداخل على الصفيف المحدد ، مع إرجاع كائن متداخل. يتوافق كل إدخال في الصفيف الترابطي المرتجع مع قيمة مفتاح مميزة يتم إرجاعها بواسطة الدالة المفتاح الأول. تعتمد قيمة الإدخال على عدد وظائف المفاتيح المسجلة: إذا كان هناك مفتاح إضافي ، فستكون القيمة عبارة عن صفيف اقتران آخر ؛ وإلا ، فإن القيمة هي صفيف العناصر التي تمت تصفيتها من صفيف الإدخال الذي يحتوي على قيمة المفتاح المحدد.

ملاحظة: هذه الطريقة غير آمنة إذا تعارض أحد المفاتيح مع خصائص JavaScript المضمنة ، مثل __proto__ . إذا لم تتمكن من ضمان سلامة المفاتيح ، فيجب عليك استخدام nest.map بدلاً من ذلك.

عش . إدخالات ( مجموعة ) Source

يطبق عامل التداخل على الصفيف المحدد ، مع إرجاع مجموعة من إدخالات قيم المفاتيح. من الناحية النظرية ، يشبه هذا تطبيق map.entries على الصفيف الترابطي الذي تم إرجاعه بواسطة map.entries nest.map ، لكنه ينطبق على كل مستوى من التسلسل الهرمي بدلاً من المستوى الأول (الأبعد) فقط. يتوافق كل إدخال في الصفيف الذي تم إرجاعه مع قيمة مفتاح مميزة يتم إرجاعها بواسطة الدالة المفتاح الأول. تعتمد قيمة الإدخال على عدد وظائف المفاتيح المسجلة: إذا كان هناك مفتاح إضافي ، فستكون القيمة عبارة عن صفيف متداخل آخر من الإدخالات ؛ وإلا ، فإن القيمة هي صفيف العناصر التي تمت تصفيتها من صفيف الإدخال الذي يحتوي على قيمة المفتاح المحدد.