تخطَّ إلى المحتوى

toSorted() / toReversed() / toSpliced() / with()

نسخ آمنة لا تعدّل المصفوفة الأصلية toSorted() / toReversed() / toSpliced() / with()

أربع دوال حديثة (ES2023) توأم لـ sort/reverse/splice وتعديل عنصر بفهرس، لكنها تُرجع مصفوفة جديدة دون لمس الأصل إطلاقًا.

منذ زمن، sort() وreverse() وsplice() تُعدّل المصفوفة الأصلية بمكانها — سلوك يسبب أخطاءً دقيقة حين لا يتوقعه المبرمج (انظر ملاحظة "الأخطاء الشائعة" بدالة sort()). النسخة الجديدة من كل دالة (باسم يبدأ بـ to أو with) تحل المشكلة جذريًا: تُرجع نسخة جديدة مُعدَّلة وتترك الأصل سليمًا تمامًا، بلا حاجة لـ [...array] يدويًا قبل الاستدعاء.

الصياغة

const sorted = array.toSorted(compareFn);
const reversed = array.toReversed();
const spliced = array.toSpliced(start, deleteCount, ...items);
const updated = array.with(index, newValue);

⚡ جرّب بنفسك

عدّل الكود واضغط «تحديث» لترى النتيجة فورًا — التجربة أفضل معلّم.

⚡ محرّر تفاعلي
const original = [3, 1, 2];
const sorted = original.toSorted((a, b) => a - b);
console.log(sorted);   // [1, 2, 3]
console.log(original); // [3, 1, 2] — لم يتغيّر إطلاقًا

const updated = original.with(0, 99);
console.log(updated);  // [99, 1, 2]
console.log(original); // [3, 1, 2]
وحدة التحكّم
اضغط «تشغيل» لرؤية النتيجة هنا.

أهم المعاملات

المعاملالوظيفة
compareFnدالة مقارنة اختيارية بـ toSorted، تمامًا مثل sort()
index / newValueبدالة with(): الفهرس المراد تغييره والقيمة الجديدة

💡 نصائح عملية

  • فضّل هذه الدوال دائمًا بكود يعتمد على immutability (مثل React state) بدل [...array].sort() اليدوية
  • with(index, value) بديل نظيف لـ array[index] = value حين تريد الاحتفاظ بالأصل

⚠️ أخطاء شائعة

  • الخلط بينها وبين النسخ القديمة الأصلية (sort/reverse/splice) التي تبقى تُعدّل المكان مباشرة — الاسم فقط هو الفرق

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار JAVASCRIPT الكامل بالعربي.