كيف يمكنني "تصفية" JSON لفريدة أزواج الاسم / القيمة الرئيسية؟

StackOverflow https://stackoverflow.com/questions/604935

سؤال

ولقد حصلت على بعض البيانات JSON التي إعطائي قائمة اللغات مع المعلومات مثل خطوط الطول / للغاز الطبيعي المسال، الخ كما أنه يحتوي على قيمة المجموعة التي أنا باستخدام الرموز - واريد بناء أسطورة مع ذلك. وJSON يبدو شيئا من هذا القبيل:

{"markers":[
  {"language":"Hungarian","group":"a", "value":"yes"},
  {"language":"English", "group":"a", "value":"yes"},
  {"language":"Ewe", "group":"b", "value":"no"},
  {"language":"French", "group":"c", "value":"NA"}
]}

وأريد أن "تصفية" أن ينتهي مثل هذا:

{"markers":[
 {"group":"a", "value":"yes"},
 {"group":"b", "value":"no"},
 {"group":"c", "value":"NA"}
]}

والآن لقد حصلت على هذا، وذلك باستخدام مسج لخلق بلدي legend..but بالطبع انها في سحب جميع القيم:

$.getJSON("http://127.0.0.1:8000/dbMap/map.json", function(json){
    $.each(json.markers, function(i, language){
        $('<p>').html('<img src="http://mysite/group' + language.group + '.png\" />' + language.value).appendTo('#legend-contents');
    });
});

وكيف يمكنني فقط الاستيلاء على أزواج اسم / قيمة فريدة في كائن JSON بأكمله، لزوج معين؟

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

المحلول

وكنت تحويل مجموعة من علامات لزوج قيمة المفتاح ثم حلقة التي تعترض خصائص.

var markers = [{"language":"Hungarian","group":"a", "value":"yes"}, 
  {"language":"English", "group":"a", "value":"yes"}, 
  {"language":"Ewe", "group":"b", "value":"no"},
  {"language":"French", "group":"c", "value":"NA"}];

var uniqueGroups = {};
$.each(markers, function() {
  uniqueGroups[this.group] = this.value;
});

ثم

$.each(uniqueGroups, function(g) {
  $('<p>').html('<img src="http://mysite/group' + g + '.png\" />' + this).appendTo('#legend-contents');
});

أو

for(var g in uniqueGroups)
{
  $('<p>').html('<img src="http://mysite/group' + g + '.png\" />' + uniqueGroups[g]).appendTo('#legend-contents');
}

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

نصائح أخرى

وماذا عن شيء أكثر عمومية؟

function getDistinct(o, attr)
{
 var answer = {};
 $.each(o, function(index, record) {
   answer[index[attr]] = answer[index[attr]] || [];
   answer[index[attr]].push(record);
 });

 return answer;    //return an object that has an entry for each unique value of attr in o as key, values will be an array of all the records that had this particular attr.
}

وليس فقط هذه الوظيفة سيعود كل القيم المتميزة التي تحددها ولكنها ستكون أيضا مجموعة منهم إذا كنت بحاجة إلى الوصول إليها.

في عينتك يمكنك استخدام:

$.each(getDistinct(markers, "group"), function(groupName, recordArray)
{ var firstRecord = recordArray[0];
        $('<p>').html('<img src="http://mysite/group' + groupName+ '.png\" />' + firstRecord.value).appendTo('#legend-contents');

}

وانظر هذا- أفضل طريقة للاستعلام العودة القيم السمة الفريدة في مجموعة جافا سكريبت الأشياء؟

وأنت فقط بحاجة مناورة بالتحقق من 2 القيم بدلا من 1.

var markers  = _.uniq( _.collect( markers , function( x ){
                        return JSON.stringify( x ); 
                    })); 

<وأ href = "http://bateru.com/news/2012/03/code-of-the-day-get-unique-objects-from-an-array-of-json-objects/" يختلط = "نوفولو"> مرجع

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