javascript:如何按年龄对员工对象数组排序
我尝试按年龄对employees对象数组进行排序,得到以下输出:javascript:如何按年龄对员工对象数组排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我尝试按年龄对employees对象数组进行排序,得到以下输出: [object Object],[object Object],[object Object],[object Object] 但是,当我将employees数组替换为数字数组时,代码运行良好,如: 变量点=[2,10,7,8] 有人能告诉我哪里出了问题吗?多谢各位 以下是我的代码: <script type="text/javascript"> function sortFunc(){ var employee
[object Object],[object Object],[object Object],[object Object]
但是,当我将employees数组替换为数字数组时,代码运行良好,如:
变量点=[2,10,7,8]
有人能告诉我哪里出了问题吗?多谢各位
以下是我的代码:
<script type="text/javascript">
function sortFunc(){
var employees=[]
employees[0]={name:"George", age:32, retiredate:"March 12, 2014"}
employees[1]={name:"Edward", age:17, retiredate:"June 2, 2023"}
employees[2]={name:"Christine", age:58, retiredate:"December 20, 2036"}
employees[3]={name:"Sarah", age:62, retiredate:"April 30, 2020"}
employees.sort(function(a, b){
return a.age-b.age
// return a-b;
})
document.getElementById("disp").innerHTML=employees;
}
</script>
</head>
<body>
<div id="disp">Click the button below to sort.</div>
<button onclick="sortFunc()">Sort Now</button>
</body>
函数sortFunc(){
var雇员=[]
员工[0]={姓名:“乔治”,年龄:32岁,退休日期:“2014年3月12日”}
员工[1]={姓名:“爱德华”,年龄:17岁,退休日期:“2023年6月2日”}
员工[2]={姓名:“克里斯蒂娜”,年龄:58岁,退休日期:“2036年12月20日”}
员工[3]={姓名:“莎拉”,年龄:62岁,退休日期:“2020年4月30日”}
员工分类(功能(a、b){
返回a.age-b.age
//返回a-b;
})
document.getElementById(“disp”).innerHTML=employees;
}
单击下面的按钮进行排序。
现在分类
您的问题不在于排序,而是因为employees是一个对象数组,因此,无论是否排序,如果您将其转换为字符串表示,以便将其添加到您将要获取的文档中
[object Object],[object Object],[object Object],[object Object]
要显示数据,您需要在将其转换为文本的方式上更加结构化。例如:
var html = "";
for(var i = 0; i < employees.length; i++) {
var employee = employees[i];
html = html + employee.name + " " + employee.age + "<br/>";
}
document.getElementById("disp").innerHTML=employees;
var html=”“;
对于(变量i=0;i”;
}
document.getElementById(“disp”).innerHTML=employees;
或者,您可以考虑使用许多javascript模板库中的一个,这些库可以轻松地将复杂的javascript结构转换为文本/html。您的方法是正确的 但是,您的JavaScript缺少所有分号。另外,您应该使用
push()
而不是直接赋值
var employees = [];
employees.push( {name:"George", age:32, retiredate:"March 12, 2014"} );
employees.push( {name:"Edward", age:17, retiredate:"June 2, 2023"} );
employees.push( {name:"Christine", age:58, retiredate:"December 20, 2036"} );
employees.push( {name:"Sarah", age:62, retiredate:"April 30, 2020"} );
employees.sort(function(a, b){
return a.age - b.age;
});
要输出可读的内容,请先将数据结构转换为字符串:
document.getElementById("disp").innerHTML = JSON.stringify(employees);
您的排序功能确实在工作。要查看输出,请尝试以下操作:
document.getElementById("disp").innerHTML='';
for(i=0; i<employees.length; i++) {
document.getElementById("disp").innerHTML+=employees[i].age+'<br>';
}
问题是
document.getElementById(“disp”).innerHTML=employees代码>-您将employees数组填充到HTML中,而无需手动将其转换为有效的HTML,因此您将获得JavaScript的默认文本表示形式,它恰好是[object object]、[object object]、[object object object]、[object object object]、[object object]
请尝试以下方法:
function prepForHTML(emp) {
var html='';
for (var i=0;i<emp.length;i++) {
for (var j in emp[i]) html+=j+"="+emp[i][j]+", ";
}
html+="<br>";
return html;
}
分拣工作正常。
您输出它的方式是不正确的
尝试使用循环而不是innerHTML将其添加到页面中
var out="";
for(var i=0;i<employees.length;i++){
out+="<p>"+employees[i]['age']+", "+employees[i]['name']+"</p>\n";
}
document.getElementById("disp").innerHTML=out;
干杯
G.您需要重写toString()
方法,默认值将显示[object]
function Employee(name, age, retiredate) {
this.name = name;
this.age = age;
this.retiredate = retiredate;
}
Employee.prototype.toString = function() {
return "Name:"+this.name+" Age:"+this.age+" Retiredate:"+this.retiredate;
};
var employees=[];
employees.push(new Employee("George", 32, "March 12, 2014"));
employees.push(new Employee("Edward", 17, "June 2, 2023"));
employees.push(new Employee("Christine", 58, "December 20, 2036"));
employees.push(new Employee("Sarah", 62, "April 30, 2020"));
employees.sort(function(a, b){
return a.age-b.age;
});
document.getElementById("disp").innerHTML=employees;
var out="";
for(var i=0;i<employees.length;i++){
out+="<p>"+employees[i]['age']+", "+employees[i]['name']+"</p>\n";
}
document.getElementById("disp").innerHTML=out;
var employees=[
{name:"George", age:32, retiredate:"March 12, 2014"},
{name:"Edward", age:17, retiredate:"June 2, 2023"},
{name:"Christine", age:58, retiredate:"December 20, 2036"},
{name:"Sarah", age:62, retiredate:"April 30, 2020"}
]
function Employee(name, age, retiredate) {
this.name = name;
this.age = age;
this.retiredate = retiredate;
}
Employee.prototype.toString = function() {
return "Name:"+this.name+" Age:"+this.age+" Retiredate:"+this.retiredate;
};
var employees=[];
employees.push(new Employee("George", 32, "March 12, 2014"));
employees.push(new Employee("Edward", 17, "June 2, 2023"));
employees.push(new Employee("Christine", 58, "December 20, 2036"));
employees.push(new Employee("Sarah", 62, "April 30, 2020"));
employees.sort(function(a, b){
return a.age-b.age;
});
document.getElementById("disp").innerHTML=employees;