2016-06-22 2 views
0

기존 응용 프로그램에 기능을 추가해야합니다.XML HTTP 요청에서 중복 값 확인

현재 Google지도가 표시되며 XML HTTP 응답에 코드가 없으면 좌표를 사용하여 특정 영역의 오버레이가 빨간색으로 색상이 지정됩니다. 그런 다음 값이 있으면 녹색으로 지정합니다.

function loadXMLDoc() { 
    var xmlhttp; 
    if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } else { // code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange = function() { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
     stationground = xmlhttp.responseText.split(","); 
    }  
    } 
    xmlhttp.open("GET","stationareas.asp",true); 
    xmlhttp.send(); 

    console.log(stationground); 
} 


function areaStatus() { 
    loadXMLDoc(); 
    map.data.setStyle(function(feature) { 
    var featurecountry = feature.getProperty('letter'); 
    if (stationground.indexOf(featurecountry) != -1) {  
     return/** @type {google.maps.Data.StyleOptions} */ { 
     fillColor: 'red' , fillOpacity: 0.25 }; 
    } else { 
     return/** @type {google.maps.Data.StyleOptions} */ { 
     fillColor: 'green' , fillOpacity: 0.25 }; 
    } 

    console.log(featurecountry); 
    }); 
} 

console.log는 stationareas.asp의 SQL 쿼리에 나열된 항목의 목록을 반환합니다.

areaStatus() 함수 내에서 응답이 이미 존재하는지 여부를 확인할 수 있으며, 그렇다면 "Apple"의 값이 3 개인 경우 해당 섹션의 색상이 녹색임을 나타낼 수 있습니다. 하지만 "보라색"섹션에서 5 색 이상인 경우

희망적입니다. 어떤 도움이 도움이 될 것입니다!

응답

구조 :

[ "C04", "C04", "C09", "C21", "C24", "C26", "C43", "C46", "C46", " 「C20」, 「E20」, 「E20」, 「E20」, 「E20」, 「E20」, 「E20」, 「E20」, 「G10」, 「G10」, 「G10」, 「G10」, 「G10」, 「G10」, 「G10」, 「G23」, 「G38」, 「G60」, 「G10」, 「G10」, 「G10」, 「G60」, 「L15」, 「L30」, 「L30」, 「L30」, 「L31」, 「L32」, 「L32」, 「L35」, 「L55」, 「L55」, 「L72」, 「L95」, 「L30」, 「L30」, 「L55」, 「L30」, 「」〕

+0

나는 실질적인 것을 시도하지 않았습니다. 처음에는 IndexOf()로 시도했지만 그게 아니라는 것을 깨달았습니다. 나는 방금 연구하고 havent 도움이 된 것을 우연히 만났습니다. 나는 얼마나 많은 가치가 있는지 세어 볼 수 있지만 각 가치에 대해 개별적인 반응이 너무 많으면 수표를 써야합니다. 그 말이 맞는다면. 위의 Apple 예제와 같습니다. –

+1

이 질문은 XML 응답의 구조와 값이 무엇인지 모른 채로는 실제로 답할 수 없습니다. 해당 배열의 경우 발생 수를 계산하십시오. 이 같은 것이 당신을 시작할 수 있습니다 : http://stackoverflow.com/questions/17313268/find-the-number-of-occurrences-a-given-value-has-in-an-array –

+0

고마워요. 나는 한번 살펴 보겠다. 나는 나의 응답 구조를 추가했다. –

답변

2

응답 배열의 중복을 제거하고 각 결과의 발생 횟수를 계산해야합니다.

JavaScript에서 고유 한 중복 제거/집계 항목에 대한 스택 오버플로 검색 결과가 많이 있습니다. 여기에 O (n * n)을 사용하여 리턴 오브젝트를 빌드하는 원시 방법이 있습니다. 위한

스크립트

// update the colors 
function updateColors(obj) { 
    if(obj.count == 1) { 
     obj.fillColor = "red"; 
    } else if(obj.count < 3) { 
     obj.fillColor = "yellow"; 
    } else if(obj.count < 10) { 
     obj.fillColor = "green"; 
    } else { 
     obj.fillColor = "blue"; 
    } 
} 

// your test data 
var responses = ["C04", "C04", "C09", "C21", "C24", "C26", "C43", "C46", "C46", "C66", "C68", "C21", "C09", "C21", "C21", "C21", "E10", "E11", "E13", "E14", "E20", "E20", "E22", "E26", "G10", "G10", "G10", "G10", "G10", "G10", "G10", "G10", "G23", "G38", "G38", "G60", "G60", "G60", "G10", "G10", "G10", "G60", "L15", "L30", "L30", "L30", "L31", "L32", "L32", "L35", "L55", "L55", "L72", "L95", "L30", "L30", "L55", "L30", ""]; 

// a new array to track the objects 
var results = []; 

// for every element in your response 
for (var i = 0; i < responses.length; i++) { 

    // see if there is an existing match 
    var found = false; 
    // loop over the existing results 
    for(var j = 0; j < results.length; j++) { 
     // if the current response matches an existing result, update the count 
     if(results[j].name == responses[i]) { 
      results[j].count++; 
      updateColors(results[j]); //update the colors 
      found = true; //set the flag to true, so we dont add this as a new result 
      j = results.length; //exit the loop 
     } 
    } 
    // if the response element wasnt matched, add it as a new result 
    if(!found) { 
     results.push({name: responses[i], count: 1, fillColor: 'red', fillOpacity: 0.25}) 
    } 
} 

//print everything 
console.log(results) 

예제 출력 '결과 [2]

횟수 : 5
fillColor의 "녹색"
fillOpacity 0.25
명 : "C21"

당신은 그것을이에서 작업을 볼 수는 바이올린을 JS : 도움이 https://jsfiddle.net/igor_9000/8tbmw2fg/

희망을!

+0

고맙습니다. 나는 이것을 구현하려고 노력할 것이다. 일단 내가 뭔가를 얻을 답변으로 받아 들일 것입니다! 다시 한번 감사드립니다. –