0

従業員のオブジェクト配列を年齢で並べ替えようとしていますが、次の出力が得られます。

[object Object],[object Object],[object Object],[object Object]

ただし、employees配列を次のような数値の配列に置き換えるだけでコードは正常に機能します。varpoints = [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>
4

6 に答える 6

1

問題は並べ替えではありません。従業員はオブジェクトの配列であるため、並べ替えられているかどうかに関係なく、取得するドキュメントに追加するために文字列表現に変換すると、

[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;

または、複雑なjavascript構造をtext/htmlに簡単に変換できる多くのjavascriptテンプレートライブラリの1つを使用することを検討できます。

于 2012-06-27T09:33:56.767 に答える
1

並べ替えは正常に機能します。出力方法が正しくありません。

ループを使用して、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;

また、次のようにオブジェクトを定義できます。

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"}
]

乾杯

G。

于 2012-06-27T09:40:00.383 に答える
0

あなたのアプローチは正しいです。

ただし、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);
于 2012-06-27T09:34:11.630 に答える
0

ソート機能は実際に機能しています。出力を表示するには、次のことを試してください。

document.getElementById("disp").innerHTML='';
for(i=0; i<employees.length; i++) {
   document.getElementById("disp").innerHTML+=employees[i].age+'<br>';
}

それ以外の

document.getElementById("disp").innerHTML=employees;
于 2012-06-27T09:35:54.780 に答える
0

問題はdocument.getElementById("disp").innerHTML=employees;、従業員の配列を手動で有効なHTMLに変換せずにHTMLに詰め込むため、JavaScriptのデフォルトのテキスト表現を取得することです。これはたまたま[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;
}

document.getElementById("disp").innerHTML=prepForHTML(employees);
于 2012-06-27T09:39:44.000 に答える
0

メソッドをオーバーライドする必要があります。toString()デフォルトではが表示されます[object 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;
于 2012-06-27T09:45:39.190 に答える