【问题标题】:sorting Javascript arrays对 Javascript 数组进行排序
【发布时间】:2014-05-19 15:33:32
【问题描述】:

我需要此代码根据用户想要排序的内容按姓氏、名字或分数进行排序。我的姓氏排序功能正常工作,问题是当我选择按分数排序时,它会对分数进行排序,但输出不是我需要的列表。它只是提取分数并将它们连接到文本区域中。我不知道如何进入学生群体以获取我需要显示的其他信息。 请帮忙。 这是我的代码

var $ = function (id) {
    return document.getElementById(id);
}


var Scores = [];
var Students = []; 
var results = ""; 

var calculate_click = function (){

    var lastName = $("last_name").value; 
    var firstName = $("first_name").value; 
    var score = parseInt($("score").value); 

    Scores.push(score);


    var student = lastName.toString() + ", " + firstName.toString() + ": " + score.toString() + "\n"; 

    Students.push(student); 

    results += student; 
    $("name_list").value = results;  
    calculateAverage(); 
    }

var calculateAverage = function () { 
    var score = 0; 
    if(Scores.length > 0) {  
        for(var n = 0; n < Scores.length; n++) 
        { score += Scores [n];
        }
        score = score/Scores.length 
    }

    $("aver_area").value = score; 
}

window.onload = function() {
    $("submit_score").onclick = calculate_click; 
    $("clear").onclick = clear_click; 
    $("sort_name").onclick = sort_click;
    $("sort_score").onclick = sort_score;  
}

var clear_click = function() {  
    Scores = [];
    Students = [];
    results = "";
    $("name_list").value = results;
    calculateAverage ();
}

var sort_click = function() {  
    Students.sort();
    results = "";
    for(var n = 0; n < Students.length; n++)
        { results += Students[n];
        }
        $("name_list").value = results;
}

var sort_score = function() {  
    Scores.sort();
    results = "";
    for(var n = 0; n < Scores.length; n++)
        { results += Scores[n];
        }
        $("name_list").value = results;
}

【问题讨论】:

  • 你的数据是什么样的?这是最重要的部分,你能发布一个输入和期望输出的例子吗?
  • 这就是我的问题所在。我的排序功能有效,但我无法链接这两个数组,所以当我按分数排序时,我实际上只是提取分数数字,而不是我需要的其他学生数据。

标签: javascript arrays sorting


【解决方案1】:

你如何保持学生和分数之间的联系?

最简单的方法是为每个学生创建一个对象,如下所示:

var students=[]; //array of student objects  
students[0]={firstName:"George", lastName:"Washington" score: 100}; //student object 1
students[1]={firstName:"Bill", lastName:"Clinton" score: 69}; //student object 2

然后创建各种排序函数:

function sortByLastName(a, b){
 var nameA=a.lastName.toLowerCase(), nameB=b.lastName.toLowerCase()
 if (nameA < nameB) //sort string ascending
  return -1 
 if (nameA > nameB)
  return 1
 return 0 //default return value (no sorting)
}

然后您可以将此排序函数传递给数组进行排序。 例如:

students.sort(sortByLastName);

更多信息: http://www.w3schools.com/jsref/jsref_sort.asp http://www.javascriptkit.com/javatutors/arraysort2.shtml

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-05
    • 2022-06-17
    • 2021-12-13
    • 2011-10-23
    • 2020-05-30
    • 2022-01-18
    • 1970-01-01
    相关资源
    最近更新 更多