문제

LAT/LNG 등과 같은 정보가있는 언어 목록을 제공하는 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"}
]}

지금은 jQuery를 사용하여 전설을 만들었습니다. 그러나 물론 모든 값을 끌어 들이고 있습니다.

$.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');

}

이것 좀 봐-javaScript 객체 배열에서 고유 한 속성 값을 쿼리하는 가장 좋은 방법?

1이 아닌 2 값을 확인하는 변형이 필요합니다.

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

참조

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top