• 0

ما هو معادل دالة zip في جافا سكربت؟

هل هنالك معادلة لدالة zip (الموجودة في بايثون) في لغة جافاسكربت؟ فأنا أريد دمج 3 مصفوفات كالتالي:

var array1 = [1, 2, 3];
var array2 = ['a','b','c'];
var array3 = [4, 5, 6];

والنتيجة ستكون كالتالي:

var output array:[[1,'a',4], [2,'b',5], [3,'c',6]]

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

هنالك عدّة طرق لدمج المصفوفات مع بعض لتشكيل أزواج كما في دالة zip في بايثون، فلو افترضنا أنك تريد كتابة دالة وأن جميع المصفوفات متساوية في الحجم – كما يفترض أن تكون – بالإضافة إلى أنك ستمرر قائمة من القوائم المعاملات (على عكس النسخة الموجودة في بايثون حيث تكون قائمة المعاملات متغيرة) فيمكنك كتابة سطور مشابه لهذه:

function zip(arrays) {
    return arrays[0].map(function(_,i){
        return arrays.map(function(array){return array[i]})
    });
}

// > zip([[1,2],[11,22],[111,222]])
// [[1,11,111],[2,22,222]]]

// If you believe the following is a valid return value:
//   > zip([])
//   []
// then you can special-case it, or just do
//  return arrays.length==0 ? [] : arrays[0].map(...)

أما في حالات عدم تساوي حجم المصفوفات فيمكنك في هذه الحالة استخدام هذه الطريقة التي ستحذف (ستدّعي عدم وجودها) قائمة العناصر التي لا تحتوي على جميع العناصر:

function zip() {
    var args = [].slice.call(arguments);
    var shortest = args.length==0 ? [] : args.reduce(function(a,b){
        return a.length<b.length ? a : b
    });

    return shortest.map(function(_,i){
        return args.map(function(array){return array[i]})
    });
}

// > zip([1,2],[11,22],[111,222,333])
// [[1,11,111],[2,22,222]]]

// > zip()
// []

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن