2017-06-16 45 views
0

基於其他問題在這裏在stackoverflow,我試圖建立一個函數來查找一個類別的播放器的排名。數據來自json文件。按類別排列json的jQuery函數

我非常接近,但一定是錯的。在控制檯上沒有錯誤。

我的代碼:

var otfljson = { 
player1: { 
    nickname: "Bob", 
    min: 100 
}, 
player2: { 
    nickname: "Amy", 
    min: 200 
}, 
player3: { 
    nickname: "Grant", 
    min: 300 
}, 
player4: { 
    nickname: "Steve", 
    min: 200 
}, 
player5: { 
    nickname: "Joe", 
    min: 500 
} 
}; 


$('#result1').html(findrankinjson(otfljson, "player1", "min")); //Wanted: 5 
$('#result2').html(findrankinjson(otfljson, "player4", "min")); //Wanted: 3 

function findrankinjson(jsonvar, person, rankby) { 
    var array = []; 
    for (var key in jsonvar) { 
     array.push(jsonvar[key]); 
    } 
    array.sort(function(a, b){ 
     return b.rankby - a.rankby; 
    }); 
    for (var i = 0; i < array.length; i++) { 
     if (i > 0 && array[i].rankby < array[i - 1].rankby) { 
      array[i].rank = i+1; 
     } 
     if (i > 0 && array[i].rankby == array[i - 1].rankby) { 
      array[i].rank = array[i-1].rank; 
     } 
    } 
    return jsonvar[person].rank; 
} 

函數的結果是 「不確定」。你可以幫我嗎?謝謝

+1

在'返回b.rankby - a.rankby;'rankby是財產,而不是分鐘的名字。試着用'return b [rankby] - a [rankby];'。對於所有以下訪問此屬性應該是相同的。 – Kaddath

回答

2

您的代碼的問題是使用.符號表示動態密鑰。當你做object.rankbyrankby只是一個可以放棄的,它不起作用。您需要使用[rankby]表示法。

var otfljson = { 
 
    player1: { 
 
    nickname: "Bob", 
 
    min: 100 
 
    }, 
 
    player2: { 
 
    nickname: "Amy", 
 
    min: 200 
 
    }, 
 
    player3: { 
 
    nickname: "Grant", 
 
    min: 300 
 
    }, 
 
    player4: { 
 
    nickname: "Steve", 
 
    min: 200 
 
    }, 
 
    player5: { 
 
    nickname: "Joe", 
 
    min: 500 
 
    } 
 
}; 
 

 

 
console.log(findrankinjson(otfljson, "player1", "min")); //Wanted: 5 
 
console.log(findrankinjson(otfljson, "player4", "min")); //Wanted: 3 
 

 
function findrankinjson(jsonvar, person, rankby) { 
 
    var array = []; 
 
    for (var key in jsonvar) { 
 
    array.push(jsonvar[key]); 
 
    } 
 
    array.sort(function(a, b) { 
 
    return b[rankby] - a[rankby]; 
 
    }); 
 
    for (var i = 0; i < array.length; i++) { 
 
    if (i > 0 && array[i][rankby] < array[i - 1][rankby]) { 
 
     array[i].rank = i + 1; 
 
    } 
 
    if (i > 0 && array[i][rankby] == array[i - 1][rankby]) { 
 
     array[i].rank = array[i - 1].rank; 
 
    } 
 
    } 
 
    return jsonvar[person].rank; 
 
}

+0

太好了。非常感謝。 – Javi