سؤال

هذا صعب بعض الشيء بالنسبة لي أن أوضح ، ولكن في PHP يمكنك أن تقول شيئًا مثل:

$myArray['someindex'] = "my string";

وإذا لم يكن هناك فهرس يسمى ذلك ، فسيقوم بإنشاء/تعيين القيمة ، وإذا كان هناك فهرس ، فسيقوم بالكتابة فوق القيمة الحالية.

قارن هذا مع JavaScript حيث كان علي اليوم إجراء شيكات مثل ذلك:

if (!myObject[key]) myObject[key] = "value";

أعلم أن هذا قد يكون قليلاً من نقطة إرضاء ، ولكن هل هناك اسم لقدرة PHP (والعديد من اللغات الأخرى) على إجراء هذه الشيكات بمفردها بدلاً من طريقة جافا سكريبت أكثر مطوّلة (قراءة: PITA)؟

تعديل

لقد أربكت نفسي في طلب هذا. لنفترض أنك تريد إضافة إلى هذا الهيكل:

myobject = {
    holidays : {easter : {date : 4/20/2010,
                          religion : Christianity}
                holi : {date : 3/10/2010,
                        religion : hindu} 
}

واجهت مشكلة اليوم حيث تلقيت بيانات جدولية وأردت وضعها في شجرة مثل هذا من خلال بناء كائن.

عندما بدأت حلقاتي ، واجهت مشكلة في وضع مؤشرات جديدة مثل myobject['holidays'][thisVariable][date] = 4/20/2010 إذا لم يتم بناء الشجرة في الغالب إلى هذه النقطة.

سوف أمسك عينة رمز من جهاز الكمبيوتر الآخر إذا لم يكن هذا واضحًا ، آسف على التفكير الضعيف.

هل كانت مفيدة؟

المحلول

أود أن أظن "تنشيط تلقائي" http://en.wikipedia.org/wiki/Autovivification من بيرل قد يكون ذا صلة ، لكنه يعمل مختلفًا عما وصفته. صفحة الويكي لديها ملخص جيد. تدعم لغات أخرى مثل Ruby خطاف "الإجراء الافتراضي" لمفاتيح التجزئة التي لم يتم تعيينها ، والتي يمكن استخدامها للتنفيذ التلقائي أيضًا.

على سبيل المثال ، في روبي:


>> h = Hash.new {|h,k| h[k] = {}}
=> {}
>> h["hello"]["world"] = 20
=> 20
>> h["hello"]["world"]
=> 20

نصائح أخرى

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

فكر في الأمر. كيف يمكن أن تحصل على القيم في كائن أو تجزئة إذا كان عليك أن يكون لديك قيمة هناك أولاً؟

تقوم JavaScript بنفس الشيء تمامًا مثل PHP هنا: MyObject [key] = "value" سوف يكتب القيمة الحالية في حالة وجود واحد. هل يمكن أن تخبرنا لماذا تفكر خلاف ذلك؟

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