سلوك مضحك من Array.Splice ()
-
29-09-2019 - |
سؤال
كنت أجرب طريقة splice () في jconsole
a = [1,2,3,4,5,6,7,8,9,10]
1,2,3,4,5,6,7,8,9,10
هنا ، A هي صفيف بسيط من 1 إلى 10.
b = ['a','b','c']
a,b,c
وهذا ب
a.splice(0, 2, b)
1,2
a
a,b,c,3,4,5,6,7,8,9,10
عندما أقوم بتمرير المصفوفة B إلى الوسيطة الثالثة من لصق ، أعني "إزالة الوسيطتين الأولين من A من index Zero ، واستبدلها بمصفوفة B". لم أر قط تمرير صفيف كحجة ثالثة لصق () (كل توجيه الصفحات التي قرأتها تحدث عن قائمة الحجج) ، ولكن ، يبدو أنها تقوم بالخدعة. [1،2] تتم إزالة والآن A [A ، B ، C ، 3،4،5،6،7،8،9،10]. ثم أقوم ببناء مجموعة أخرى ، والتي أسميها C:
c = ['one','two','three']
one,two,three
وحاول أن تفعل الشيء نفسه:
a.splice(0, 2, c)
a,b,c,3
a
one,two,three,4,5,6,7,8,9,10
هذه المرة ، تتم إزالة 4 (بدلاً من 2) عناصر [A ، B ، C ، 3] ويتم إضافة صفيف C في البداية. شخص ما يعرف لماذا؟ أنا متأكد من أن الحل تافهة ، لكنني لا أحصل عليه الآن.
المحلول
Array.splice
يفعل ليس دعم صفيف باعتباره المعلمة الثالثة.
المرجعي: https://developer.mozilla.org/en/javascript/reference/global_objects/array/splice
استخدام Firebug (أو وحدة التحكم في Chrome) ، يرى المرء ما يحدث حقًا:
a.splice(0, 2, b)
> [1, 2]
a
> [["a", "b", "c"], 3, 4, 5, 6, 7, 8, 9, 10]
المشكلة هنا هي jconsole ، التي تستخدم فقط toString()
لطباعة المصفوفات ، ولكن Array.toString()
لا يطبع أي []
.