2014-11-06 3 views
0

이 영역과 관련된 다른 비슷한 질문이 있지만 그 중 아무 것도 대답하지 못했다는 것을 알고 있습니다. 내 경우에는 다음 코드가 있고 내림차순으로 레코드 배열을 점수로 정렬하려고합니다.속성 '점수'를 읽을 수 없습니다. 정의되지 않음

function score(string, pattern){ 
    string = string.toLowerCase(); 
    pattern = pattern.toLowerCase(); 

    var position = 0; 
    var count = 0; 
    while (true) { 
    var index = string.indexOf(pattern, position); 
    if (index == -1) break; 
    count++; 
    position = index + 1; 
    } 
    return(count); 
} 

function urlScores(web, pattern){ 
    var records = {}; 
    var results = []; 
    var n = 0; 
    for(var i = 0; i < web.length; i++){ 
    n = score(web[i].content, pattern); 
    if(n != 0){ 
     records.url = web[i].url; 
     records.score = n; 
     results[results.length] = {url: records.url, score: records.score}; 
    } 
    } 
    return(JSON.stringify(results)); 
} 

function rankedScores(web, pattern){ 
    results = JSON.parse(urlScores(web, pattern)); 
    var temp = 0; 
    var tempUrl = ''; 
    while(counter < results.length){ 
    for(var i in results){ 
     numbers[numbers.length] = results[i].score; 
     if(results[i].score < results[i + 1].score){ 
     temp = results[i].score; 
     tempUrl = results[i].url; 
     results[i] = {url: results[i+1].url, score: results[i+1].score}; 
     results[i + 1] = {url: tempUrl, score: temp}; 
     } 
    } 
    counter++; 
    } 
    alert(JSON.stringify(results)); 
} 

가장 마지막 기능은 나에게 문제가되는 것입니다. 사용자가 다음을 실행하는 경우 :

var web = [{url : "www.southampton.ac.uk", 콘텐츠 : "Southampton University는 학위 프로그램과 세계 수준의 연구 시험을 제공합니다." }, {url : "www.xyz.ac.uk", 내용 : "대안 대학 시험 테스트 테스트"}, {url : "www", content : "또 다른 대학 시험"}];

득점 스코어 (web, 'test');

내림차순으로 동일한 배열을 출력해야합니다. 대신 나는 정의되지 않은 속성 '점수'를 읽을 수 없습니다. 아무도 내가 잘못 간 곳을 볼 수 있습니까?
덕분에
또한 .sort()를 사용할 수 없습니다! rankedScores에서

답변

1
function rankedScores(web, pattern){ 
    var results = JSON.parse(urlScores(web, pattern)); 
    var temp = 0; 
    var tempUrl = ''; 
    var counter = 0; 
    var numbers = [], i, len = results.length; 

    while (counter < results.length){ 
    for (i = 0; i < len - 1; i++){ 
     numbers[numbers.length] = results[i].score; /// ???? 

     if (results[i].score < results[i + 1].score){ 
     temp = results[i].score; 
     tempUrl = results[i].url; 

     results[i]  = {url: results[i+1].url, score: results[i + 1].score}; 
     results[i + 1] = {url: tempUrl, score: temp}; 
     } 
    } 

    counter++; 
    } 

    alert(JSON.stringify(results)); 
} 
+0

! 어떻게 고칠 수 있는지 알 겠어! 나는 그것을 해결하려고 시도하는 이전의 시도 였고 필요하지 않은 것처럼 '숫자'를 삭제했다. 매우 도움이된다! – air6199

+0

당신은 환영합니다 ... –

1

, 당신은 당신의 ifresults[i+1].score를 사용하고 있지만, (i 마지막 하나의 인덱스이기 때문에) results의 이러한 요소가없는 경우에는 오류가 설명 얻을 것입니다.

+0

제가 이것이 문제가 될 수 있다고 생각했지만 용지에이 해결책을 찾았지만 마지막 것까지 작동해야합니다. 어떻게하면 오류없이 올바른 값을 출력합니까? 덕분에 – air6199

0

이 라인 : 배열의 마지막 요소에 대해

if(results[i].score < results[i + 1].score){ 

결과가 [I + 1]이 존재하지 않을 것이다. 그 케이스를 잡으려고 다른 조건을 추가해보십시오.

if(typeof results[i + 1] != 'undefined' && results[i].score < results[i + 1].score){ 
관련 문제