سؤال

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

options = {key1: "value1", key2: "value2"};

يجب أن تكون النتيجة هي المصفوفة:

["key1", "key2"]

أو مجرد سلسلة:

"key1, key2"
هل كانت مفيدة؟

المحلول

يمكنك بسهولة الحصول على مجموعة منهم عبر أ for حلقة ، على سبيل المثال:

var keys = [];
for(var key in options) {
  if(options.hasOwnProperty(key)) { //to be safe
    keys.push(key);
  }
}

ثم استخدام keys كيف تريد ، على سبيل المثال:

var keyString = keys.join(", ");

يمكنك اختباره هنا. ال .hasOwnProperty() تحقق من أن تكون آمنة ، في حالة تعبئة أي شخص مع النموذج الأولي للكائن وما شابه.

نصائح أخرى

options = {key1: "value1", key2: "value2"};
keys = Object.keys(options);

طريقة jQuery للقيام بذلك:

var keys = [];
options = {key1: "value1", key2: "value2"};
$.each(options, function(key, value) { keys.push(key) })
console.log(keys)

معظم المتصفحات الرئيسية لديها هذه الوظيفة مدمجة الآن ، والطريقة هي Object.keys():

var keys = Object.keys(options);
//-> ["key1", "key2"]

يمكنك أيضًا استخدام مقتطف صغير لتنفيذ هذا في المتصفحات التي لا تدعمه:

Object.keys = Object.keys || (function () {
    var hasOwnProperty = Object.prototype.hasOwnProperty;

    return function (o) {
        if (typeof o != "object" && typeof o != "function" || o === null)
            throw new TypeError("Object.keys called on a non-object");

        var result = [];
        for (var name in o) {
            if (hasOwnProperty.call(o, name))
                result.push(name);
        }

        return result;
    };
})();

يعمل هذا المقتطف إلى حد كبير مثل مثال نيك كرافير مع استثناءين:

  • سوف يرمي نوعًا ذا معنى إذا قمت بتمرير أي شيء آخر غير كائن (أو "صفيف ترابط" ، إذا أردت).
  • ستعمل على قضية مزعجة متعلقة بـ DOM في Internet Explorer حيث لا يوجد لدى المجموعات hasOwnProperty طريقة.

هذا (والإجابات الأخرى هنا) لا يعمل حول خطأ تعداد IE ، ولكن. يمكنك العثور على مزيد من المعلومات والعمل الجزئي حول ذلك هذا الجواب هنا.

يمكنك الآن استخدام

Object.keys(obj)

للحصول على صفيف يتكون من المفاتيح المتاحة في كائن. موزيلا لديها معلومات الاستخدام والتوافر.

يمكنك استخدام $.each() في jQuery:

function keyArray(obj) {
  var rv = [];
  $.each(options, function(key) { rv.push(key); });
  return rv;
}

من ثم

var keys = keyArray(options);

يعطيك ["key1", "key2"] كصفيف ، يمكنك join للحصول على سلسلة.

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