2014-11-06 86 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」,內容:「南安普敦大學提供學位課程和世界級的研究測試。」 },{url:「www.xyz.ac.uk」,內容:「另一項大學考試測試」},{url:「www」,內容:「另一項大學考試」}];

rankingScores(web,'test');

它應該輸出相同的數組,但以降序排列。相反,我得到一個無法讀取未定義的屬性'分數'。任何人都可以看到我出錯的地方嗎?
謝謝
也,我們不允許使用.sort()!

回答

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 2014-11-06 19:37:42

+0

歡迎您... – 2014-11-06 19:40:08

1

rankedScores,你在你的if使用results[i+1].score,但如果是results沒有這樣的元素(因爲i是最後一個的指數),你會得到所描述的錯誤。

+0

我認爲這可能是一個問題,但我已經追查在紙上這一解決方案,它應該工作,直到最後一個。我如何終止在最後一個,所以它沒有錯誤輸出正確的值? – air6199 2014-11-06 19:22:53

0

這條線:

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

對於數組中的最後一個元素,結果第[i + 1]將不存在。嘗試添加另一個條件趕上這種情況下:

if(typeof results[i + 1] != 'undefined' && results[i].score < results[i + 1].score){ 
相關問題