سؤال

إذا كان لدي التالية:

{"hdrs": ["Make","Model","Year"],
 "data" : [ 
   {"Make":"Honda","Model":"Accord","Year":"2008"}
   {"Make":"Toyota","Model":"Corolla","Year":"2008"}
   {"Make":"Honda","Model":"Pilot","Year":"2008"}]
}

ولدي "قياس" اسم (أي"جعل"), كيف يمكنني الرجوع data مجموعة الحالات ؟ يبدو data["Make"][0] يجب أن تعمل ولكن غير قادر على الحصول على حق المرجعية

تحرير

آسف على الغموض..أستطيع من خلال حلقة hdrs للحصول على كل اسم hdr, ولكن أنا بحاجة إلى استخدام كل مثيل قيمة hdrs للعثور على جميع عناصر البيانات في data (غير متأكد من أن هذا هو أفضل تفسير).وسوف يكون ذلك في متغير t لأنه هو سلمان (نقدر إعادة وضع علامات) وأود أن تكون قادرة على الإشارة مع شيء من هذا القبيل: t.data[hdrs[i]][j]

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

المحلول

اضطررت إلى تغيير التعليمات البرمجية الخاصة بك قليلا:

var x = {"hdrs": ["Make","Model","Year"],
         "data" : [ 
           {"Make":"Honda","Model":"Accord","Year":"2008"},
           {"Make":"Toyota","Model":"Corolla","Year":"2008"},
           {"Make":"Honda","Model":"Pilot","Year":"2008"}]
        };

        alert( x.data[0].Make );

تحرير:ردا على تحرير الخاص بك

var x = {"hdrs": ["Make","Model","Year"],
         "data" : [ 
           {"Make":"Honda","Model":"Accord","Year":"2008"},
           {"Make":"Toyota","Model":"Corolla","Year":"2008"},
           {"Make":"Honda","Model":"Pilot","Year":"2008"}]
        };
var Header = 0; // Make
for( var i = 0; i <= x.data.length - 1; i++ )
{
    alert( x.data[i][x.hdrs[Header]] );
}           

نصائح أخرى

لذلك مثل هذا ؟

var theMap = /* the stuff you posted */;
var someHdr = "Make";
var whichIndex = 0;
var correspondingData = theMap["data"][whichIndex][someHdr];

التي يجب أن تعمل إذا كنت قد فهمت بشكل صحيح...

var x = {"hdrs": ["Make","Model","Year"],
 "data" : [ 
   {"Make":"Honda","Model":"Accord","Year":"2008"}
   {"Make":"Toyota","Model":"Corolla","Year":"2008"}
   {"Make":"Honda","Model":"Pilot","Year":"2008"}]
};

x.data[0].Make == "Honda"
x['data'][0]['Make']  == "Honda"

لديك مجموعة/تجزئة البحث إلى الوراء :)

أنا لست متأكدا من أنني أفهم سؤالك, ولكن...

على افتراض أعلاه سلمان هو فار الكائنات ، تريد:

obj.data[0]["Make"] // == "Honda"

إذا كنت فقط أريد أن أشير إلى الحقل المشار إليه من قبل أول رأس سيكون شيئا مثل:

obj.data[0][obj.hdrs[0]] // == "Honda"

أولا نسيت زائدة الفواصل في البيانات الخاصة بك مجموعة من البنود.

جرب ما يلي:

var obj_hash = {
    "hdrs": ["Make","Model","Year"],
    "data" : [
        {"Make":"Honda","Model":"Accord","Year":"2008"},
        {"Make":"Toyota","Model":"Corolla","Year":"2008"},
        {"Make":"Honda","Model":"Pilot","Year":"2008"},
    ]
};

فار ref_data = obj_hash.البيانات ؛

alert(ref_data[0].Make);

@كينت فريدريك:علما أن آخر فاصلة ليس ضروريا ، ولكن يسمح لك بسهولة نقل خطوط حول (أي إذا قمت بنقل أو إضافة بعد آخر سطر, و لم تكن فاصلة ، يجب أن أتذكر على وجه التحديد إلى إضافة واحدة.أعتقد أنه من الأفضل أن يكون دائما زائدة الفواصل.)

ربما في محاولة البيانات[0].جعل

إغلاق ،

var x = data[0].Make;
var z = data[0].Model;
var y = data[0].Year;

التعليمات البرمجية الخاصة بك كما يتم عرضها ليس نحويا الصحيح ؛ فإنه يحتاج الى بعض الفواصل.حصلت على هذا العمل:

$foo = {"hdrs": ["Make","Model","Year"],
 "data" : [ 
   {"Make":"Honda","Model":"Accord","Year":"2008"},
   {"Make":"Toyota","Model":"Corolla","Year":"2008"},
   {"Make":"Honda","Model":"Pilot","Year":"2008"}]
};

ومن ثم لا يمكن الوصول إلى البيانات مثل:

$foo["data"][0]["make"]

مع مساعدة من الإجابات (و بعد الحصول على داخل وخارج الحلقات الصحيح) حصلت على هذا العمل:

var t = eval( "(" + request + ")" ) ;
for (var i = 0; i < t.data.length; i++) {
 myTable +=    "<tr>";
 for (var j = 0; j < t.hdrs.length; j++) {
  myTable += "<td>" ;
   if (t.data[i][t.hdrs[j]] == "") {myTable += "&nbsp;" ; }
    else { myTable += t.data[i][t.hdrs[j]] ; }
  myTable += "</td>";
 }
 myTable +=    "</tr>";
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top