Object.entries()‎

من موسوعة حسوب

الدالة Object.entries()‎ تُعيد مصفوفةً تحتوي على الخاصيات القابلة للإحصاء التابعة لأحد الكائن على شكل الأزواج [key, value] بنفس الترتيب الذي تُوفِّر حلقة التكرار for...in.

الفرق بين هذه الدالة وحلقة التكرار for...in هو أنَّ حلقة for...in ستمرّ على الخاصيات القابلة للإحصاء والموجودة في سلسلة prototype أيضًا.

البنية العامة

Object.entries(obj)

obj

الكائن الذي ستُعاد الخاصيات القابلة للإحصاء التابعة له على شكل الأزواج [key, value].

القيمة المعادة

مصفوفة تحتوي على قيم الخاصيات القابلة للإحصاء التابعة للكائن obj على شكل الأزواج [key, value].

أمثلة

مثال عن كائن بسيط:

const obj = { foo: 'bar', baz: 42 };
console.log(Object.entries(obj)); // [ ['foo', 'bar'], ['baz', 42] ]

مثال عن كائن شبيه بالمصفوفات:

const obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.entries(obj)); // [ ['0', 'a'], ['1', 'b'], ['2', 'c'] ]

مثال عن كائن شبيه بالمصفوفات لكن ترتيب المفاتيح فيه عشوائيٌ:

const anObj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.entries(anObj)); // [ ['2', 'b'], ['7', 'c'], ['100', 'a'] ]

الخاصية getFoo هي خاصيةٌ غير قابلةٍ للإحصاء في الكائن myObj:

const myObj = Object.create({}, { getFoo: { value() { return this.foo; } } });
myObj.foo = 'bar';
console.log(Object.entries(myObj)); // [ ['foo', 'bar'] ]

لاحظ أنَّه إذا مُرِّر وسيطٌ لا يُمثِّل كائنًا، فسيحوّل إلى كائن؛ كما في السلسلة النصية الآتية:

console.log(Object.entries('foo')); // [ ['0', 'f'], ['1', 'o'], ['2', 'o'] ]

لكن ستُعاد مصفوفةٌ فارغةٌ لأيّ نوع بياناتٍ أوليّ، لأنَّ القيم الأوليّة لا تملك أيّة خاصيات تابعة لها:

console.log(Object.entries(100));  // [ ]
console.log(Object.entries(true)); // [ ]

المرور على خاصيات الكائن وقيمها عبر حلقة التكرار for...of:

const obj = { a: 5, b: 7, c: 9 };
for (const [key, value] of Object.entries(obj)) {
  console.log(`${key} ${value}`); // "a 5", "b 7", "c 9"
}

أو عبر استخدام دوال المصفوفات:

Object.entries(obj).forEach(([key, value]) => {
console.log(`${key} ${value}`); // "a 5", "b 7", "c 9"
});

يمكن استخدام الدالة Object.entries()‎ لتحويل كائن من النوع Object إلى Map:

const obj = { foo: 'bar', baz: 42 }; 
const map = new Map(Object.entries(obj));
console.log(map); // Map { foo: "bar", baz: 42 }

تعويض نقص دعم المتصفحات

لإضافة دعم للدالة Object.entries()‎ في البيئات التي لا تدعمها، فيمكنك الاستعانة بالشيفرة الآتية:

if (!Object.entries)
  Object.entries = function( obj ){
    var ownProps = Object.keys( obj ),
        i = ownProps.length,
        resArray = new Array(i); // preallocate the Array
    while (i--)
      resArray[i] = [ownProps[i], obj[ownProps[i]]];
    
    return resArray;
  };

إذا أردتَ دعم متصفحات IE التي إصدارها أقل من 9، فيجب أن توفِّر دالةً بديلةً للدالة Object.keys (وستجدها في صفحتها).

دعم المتصفحات

الميزة Chrome Firefox Internet Explorer Opera Safari
الدعم الأساسي 54 47 غير مدعومة غير مدعومة 10.1

على النقيض من متصفح IE، يدعم متصفح Edge هذه الميزة.

مصادر ومواصفات