上位ユーザーのリストとその返信数を表示しようとしていますが、2 つの問題があります。
- ユーザーに対して誤った数の返信を表示している (何らかの理由で倍増している)、および
- トップユーザーのリストにユーザーが複数回表示されることがあります
次のように、すべての一意のユーザーと正しい返信数のリストが必要です。
- ジェーン ドウ 8
- ジャック・スミス 7
- アンドレア・ジョンソン 5
- フレッド・ジャクソン 4
- 等。
編集が必要な部分は次のとおりだと思います。
{
var htmlToAdd = '';
people.sort(compareTotals);
people.remove(0);
var peopleLimit = people.length;
if (peopleLimit > 10)
peopleLimit = 10;
for (var i = 0; i < peopleLimit; i++)
{
htmlToAdd = htmlToAdd + '<div class="peopleLink"><a href="' + people[i][2] + '">' + people[i][3] + '</a> has posted ' + people[i][0] + ' replies.</div>';
}
jQuery('#peopleList').html(htmlToAdd);
}
何を変更する必要があるかについてのアイデアはありますか?
これが役立つ場合、完全なコードは次のとおりです。
if (jQuery("div.community_topic_box").size() > 0) // Only true for the front page
{
jQuery("#postersFrame").insertAfter(".community_stats");
}
else
{
jQuery("#postersFrame").hide();
}
});
var people = new Array();
var peopleFinished = 0;
var repliesHandled = 0;
var count = 0;
// Generic JSON functions
function JSONscriptRequest(fullUrl) {
this.fullUrl = fullUrl;
this.headLoc = document.getElementsByTagName("head").item(0);
this.scriptId = 'YJscriptId' + JSONscriptRequest.scriptCounter++;
}
JSONscriptRequest.scriptCounter = 1;
JSONscriptRequest.prototype.buildScriptTag = function () {
this.scriptObj = document.createElement("script");
this.scriptObj.setAttribute("type", "text/javascript");
this.scriptObj.setAttribute("src", this.fullUrl);
this.scriptObj.setAttribute("id", this.scriptId);
}
JSONscriptRequest.prototype.removeScriptTag = function () {
this.headLoc.removeChild(this.scriptObj);
}
JSONscriptRequest.prototype.addScriptTag = function () {
this.headLoc.appendChild(this.scriptObj);
}
function handlerTopics(results) {
var obj;
if ( results.total > 0)
{
count = results.total / 30;
var htmlToAdd = '';
if (results.total > 30)
{
var iterations = results.total / 30;
for (var j=0; j < iterations; j++)
{
obj=new JSONscriptRequest('https://api.getsatisfaction.com/companies/' + companyName + '/topics.json?sort=recently_active&active_since=' + timeStamp + '&limit=30&page=' + j +'&callback=handlerEachTopics');
obj.buildScriptTag(); // Build the script tag
obj.addScriptTag(); // Execute (add) the script tag
}
}
else{
obj=new JSONscriptRequest('https://api.getsatisfaction.com/companies/' + companyName + '/topics.json?sort=recently_active&limit=30&active_since=' + timeStamp + '&callback=handlerEachTopics');
obj.buildScriptTag(); // Build the script tag
obj.addScriptTag(); // Execute (add) the script tag
}
}
jQuery('#peopleList').html('Loading member details...')
}
function handlerEachTopics(results) {
if ( results.data.length > 0)
{
for(var i=0; i<results.data.length; i++)
{
if (results.data[i].active_replies > 0)
{
obj=new JSONscriptRequest( results.data[i].url + '/replies.json?callback=handlerEachTopicReplies');
obj.buildScriptTag(); // Build the script tag
obj.addScriptTag(); // Execute (add) the script tag
repliesHandled++;
}
}
}
peopleFinished++;
}
function handlerEachTopicReplies(results) {
if ( results.data.length > 0)
{
for(var i=0; i<results.data.length; i++)
{
if ((!results.data[i].author.employee) &&(!isInArrayYet(results.data[i].author.canonical_name) > 0))
{
people[people.length] = [1, results.data[i].author.canonical_name, results.data[i].author.at_sfn, results.data[i].author.name];
}
}
}
repliesHandled--;
if ((peopleFinished >= count - 1) && (repliesHandled <= 0 ))
{
var htmlToAdd = '';
people.sort(compareTotals);
people.remove(0);
var peopleLimit = people.length;
if (peopleLimit > 10)
peopleLimit = 10;
for (var i = 0; i < peopleLimit; i++)
{
htmlToAdd = htmlToAdd + '<div class="peopleLink"><a href="' + people[i][2] + '">' + people[i][3] + '</a> has posted ' + people[i][0] + ' replies.</div>';
}
jQuery('#peopleList').html(htmlToAdd);
}
}
function isInArrayYet(name)
{
for(var i=0; i< people.length; i++)
{
if (people[i][1] == name)
{
people[i][0]++;
return true;
}
}
return false;
}
function compareTotals(a, b) {
return b[0] - a[0];
}
Array.prototype.remove = function(from, to) {
var rest = this.slice((to || from) + 1 || this.length);
this.length = from < 0 ? this.length + from : from;
return this.push.apply(this, rest);
};
</script>
ユーザーのリスト内の各アイテムとその返信が 1 回だけ表示されるようにするにはどうすればよいですか? また、返信の数が増えないようにするにはどうすればよいですか? ご協力ありがとうございました。