yazn_108 image

يزن احمد(@yazn_108)مطور مواقع فرونت اند

لا تتصل بنا بل تواصل معي

لا حاجة للتكلف في صياغة الرسالة كل ما تحب ان اساعدك فيه، اخبرني عنه. اذا عندك اي شيء تحب تخبرني عنه فانا جاهز لمساعدتك والهدف من المنصة هو البساطة وتجنب التكلفات والرسميات التي اعتدنا عليها في المواقع حتى اصبحت جميع المواقع لها نمط واحد وان تنوعت في الافكار والاشكال.اهلا وسهلا ومرحبا بك

اشترك في النشرة البريدية

ما راح أزعجك برسائل كثيرة، كل القصة إنك تحط بريدك عشان يوصلك تنبيه أول ما أنشر مقالات جديدة. بسيطة وسهلة 👌 أهلاً بك.

هدف المنصة/من انا؟شروط الاستخدام

© جميع الحقوق محفوظة لـyazn_108

حماية الـarray في JavaScript

نسخ الـarrays بدل التأثيير عليها.

  1. مقدمة
  2. الـsort اصبح بديلها .toSorted()
  3. الـreverse اصبح بديلها .toReversed()
  4. الـsplice اصبح بديلها .toSpliced()
  5. قد يقول قائل
  6. المصدر
  7. اشترك في النشرة البريدية

مقدمة

بعد اخر تحديثات صدرت في ECMAScript 2023 (ES2023) ظهرت methods لحل مشكلة مزعجة موجودة في javascript بشكل عام وهي مشكلة تغير ترتيب قيم الـarray الاصلية في حال قمت باجراء اي تعديل على الـarray في اي جزء من كود الموقع بدل اخذ نسخة منها والتعديل عليها دون التعديل على الـarray الاصلية.

مثلا لو كتبت

javascript

const numbers = [3, 1, 2];
numbers.sort();
console.log(numbers); // [1, 2, 3]

النتيجة رح تكون ان الـarray الاصلية تغير ترتيب قيمها وهنا المشكلة وتظهر بشكل اكبر في react لأن احيانا يكون معتمد على نفس الـarray عدة اجزاء من الموقع فمن الغير المنطقي التعديل على الـarray في مكان في الموقع ثم يصل تأثير هذا التعديل لبقية اجزاء الموقع وهنا ظهر الحل وهو ان

الـsort اصبح بديلها .toSorted()

javascript

const numbers = [3, 1, 2];
const sortedArray = numbers.toSorted();
console.log(sortedArray); // [1, 2, 3]
console.log(numbers); // [3, 1, 2] -> لم تتغير

الـreverse اصبح بديلها .toReversed()

javascript

const letters = ["a", "b", "c"];
const reversedLetters = letters.toReversed();
console.log(reversedLetters); // ['c', 'b', 'a']
console.log(letters); // ['a', 'b', 'c'] -> لم تتغير

الـsplice اصبح بديلها .toSpliced()

javascript

const skills = ["javascript", "typescript", "nextjs"];
const removeSkill = skills.toSpliced(0, 1);
console.log(removeSkill); // ['typescript', 'nextjs']
console.log(skills); // ['javascript', 'typescript', 'nextjs'] -> لم تتغير

قد يقول قائل

الحل بسيط وهو ان نقوم بعمل نسخة بشكل يدوي بهذا الشكل

javascript

const arr = [3, 1, 2];

const newArr = [...arr]; // النسخة اليدوية
newArr.sort();
console.log(newArr); // [1, 2, 3]

console.log(arr); // [3, 1, 2]

ولكن تذكر ان هذه الطريقة غير جيدة لاداء الكود في حال كانت الـarray ضخمة، نعم قد لا يكون فارق كبير ولكن هذه الفروقات البسيطة هي ما تحدث كارثة بعد التراكمات بالاضافة إلى ان الـmethods الجديدة اقل كود واكثر وضوحا يعني كود احترافي اكثر.

المصدر

https://allthingssmitty.com/