حلقات جافا سكريبت من خلال المتغيرات

0

إذاً هذا هو رمزي الحالي وأنا أحاول اكتشاف طريقة للتكرار من خلال المتغيرات التي أعلنتها بالفعل (بافتراض أن المتغيرات من 1 إلى 9 لها قيم بالفعل). أردت فقط أن أعرف ما إذا كان هذا ممكنًا على الإطلاق؟

var title;
var brief;
var hover;
var whatTitle;
var whatDesc;
var whyTitle;
var whyDesc;
var funTitle;
var funDesc;
var titles = [];
var briefs = [];
var hovers = [];
var whatTitles = [];
var whatDescs = [];
var whyTitles = [];
var whyDescs = [];
var funTitles = [];
var funDescs = [];

    var obj = {'titles' : title};
    if(localStorage.getItem('titles') != null) {
        var tmp = JSON.parse(localStorage.getItem('titles'));
        for(var i = 0;i<tmp.length;i++) {
            titles.push(tmp[i]);
        }

    }
    titles.push(obj);
    localStorage.setItem("titles", JSON.stringify(titles));

المخرج الذي أريده إذا قمنا بطباعة الرمز المتكرر:

var obj = {'titles' : title};
    if(localStorage.getItem('titles') != null) {
        var tmp = JSON.parse(localStorage.getItem('titles'));
        for(var i = 0;i<tmp.length;i++) {
            titles.push(tmp[i]);
        }

    }
    titles.push(obj);
    localStorage.setItem("titles", JSON.stringify(titles));

var obj = {'briefs' : brief};
    if(localStorage.getItem('briefs') != null) {
        var tmp1 = JSON.parse(localStorage.getItem('briefs'));
        for(var i = 0;i<tmp.length;i++) {
            briefs.push(tmp[i]);
        }

    }
    briefs.push(obj);
    localStorage.setItem("briefs", JSON.stringify(briefs));

var obj = {'hovers' : hover};
    if(localStorage.getItem('hovers') != null) {
        var tmp2 = JSON.parse(localStorage.getItem('hovers'));
        for(var i = 0;i<tmp.length;i++) {
            hovers.push(tmp[i]);
        }

    }
    hovers.push(obj);
    localStorage.setItem("hovers", JSON.stringify(hovers));

...etc

3 الاجابة

1
افضل جواب

أنت على وشك الانتهاء من الرمز الذي لديك. إذا نظرت إلى أمثلة "المخرجات المطلوبة" ، فسترى أن الشيء الوحيد الذي يختلف حقًا بين كل عنصر من عناصر "الحلقة غير المنضبطة" هو مفتاح التخزين المحلي ("العناوين" و "الملخصات" و "التمرير") .

مع أخذ ذلك في الاعتبار ، يمكنك استخدام كائن لتعيين مفاتيح المتغيرات التي لديك في المستوى العلوي. إذا هذا:

var titles = [];
var briefs = [];
var hovers = [];
var whatTitles = [];
var whatDescs = [];
...

يصبح ( تحديث : مع الاحتفاظ بقيم التهيئة):

var key_to_collection = {
  'titles': [title],
  'briefs': [brief],
  'hovers': [hovers],
  'whatTitles': [whatTitles],
  'whatDescs': [whatDescs],
}

ثم تقوم بالتكرار فوق قيم هذا الكائن:

Object.keys(key_to_collection).forEach(function(key) {
  var obj = {};
  collection = key_to_collection[key];
  obj[key] = collection;
  if(localStorage.getItem(key) != null) {
    var tmp = JSON.parse(localStorage.getItem(key));
    for(var i = 0;i<tmp.length;i++) {
      collection.push(tmp[i]);
    }
  }
  collection.push(obj);
  localStorage.setItem(key, JSON.stringify(collection));
});
:مؤلف
1
افضل جواب

إذا كان الرمز يعمل في متصفح ، فيمكنك القيام بشيء مثل:

for(key in window) { console.log(window[key]) } // print all variables

ترتبط المتغيرات بمساحة الاسم العمومية. هذا يعني أن المرجع الأعلى "هذا" أو كائن النافذة.

:مؤلف
0

إذا كان اسم المتغير الخاص بك title على سبيل المثال ، ثم يمكنك الوصول إليه باستخدام window['title'] . هذا يعني أنه إذا قمت بتعريف مصفوفة من أسماء المتغيرات العالمية الخاصة بك:

const varNames = ['title', 'brief', 'hover', ...]

ثم يمكنك عمل حلقة مثل ما يلي

for(const name of varNames) {
  const value = window[name]
  // do whatever you want using the variable name and value 
}

آمل أن يحل هذا مشكلتك :)

:مؤلف

أسئلة ذات صلة

فوق
قائمة طعام