鑑於學生下面的記錄的陣列 - 你將如何按升序排列,根據年齡的Javascript使用它們排序?
students = [{
name: "timothy",
age: "9"},
{
name: "claire",
age: "12"},
{
name: "michael",
age: "20"}]
鑑於學生下面的記錄的陣列 - 你將如何按升序排列,根據年齡的Javascript使用它們排序?
students = [{
name: "timothy",
age: "9"},
{
name: "claire",
age: "12"},
{
name: "michael",
age: "20"}]
按年齡進行升序排列,使用Array.sort
使用自定義比較函數:
students.sort(function (a, b)
{
return a.age - b.age;
});
// students will be
[{name: "timothy", age: "9"},
{name: "claire", age: "12"},
{name: "michael", age: "20"}]
函數應該執行在執行減法之前parseInt?我會想象如果它是基於字符串表示完成的話,它可能會返回愚蠢的結果。 –
@Joel'parseInt(age,10)'肯定會起作用,但不是絕對必要的。減法操作將操作數強制轉換爲數字。 –
如果其中一個值不能轉換爲數字,則會返回NaN。 –
通過年齡:
students = students.sort(function(a, b) {
return parseFloat(a.age) - parseFloat(b.age);
});
你不需要'parseFloat'(減法將強制編號),你不需要賦值('Array.sort'就地)。 –
student.sort(function(a,b){
if (a.name > b.name)
return -1;
return 1;
});
不能在'Object'上使用'>'。那麼什麼時候'a === b'? –
@MattBall現在糾正。謝謝。 – sathis
讀了這個例子:
var marks = new Array(10,12,11,20,2);
for(var i=0;i<marks .length;i++) //Hold the first element
{
for(var j=i+1;j<marks.length;j++) //Hold the next element from the first element
{
if(Number(marks[i]) > Number(marks[j])) //comparing first and next element
{
tempValue = marks[j];
marks[j] = marks[i];
marks[i] = tempValue;
}
}
}
document.write(marks);
這是一個**糟糕的排序實施。 –
我試過了,它不起作用? jsfiddle.net/EH8Pm/2/ – jasonscott
@jason:在你的jfiddle例子中,你只交換年齡,而不是整個數組元素。此外,你輸出'標記'而不是'學生'。 –
students.sort(function(a,b){
if (+a.age > +b.age) return 1;
return -1;
});
// Now the object is ordered by age (min to max)
如果你想知道,+ a.age相同號(a.age)
如果兩個人有同樣的年齡? –
他們根據他們以前在陣列中的位置(隨機類型)聚合在一個位置上。如果你想在年齡相等的時候按字母順序排列它們,你可以在開始處寫入if'(+ a.age == + b.age)return [a.name,b.name] .sort()[0] = = a.name? -1:1;' –
升序由什麼性質?爲什麼年齡是弦而不是數字? –
首先定義您正在排序的內容,因爲您可以按照您的示例中的年齡或姓名進行排序。通過使用整數實現多種排序算法,年齡很容易。對於名稱,可以轉換爲和ASCII表示,然後再對整數值進行排序。查看維基百科上的快速排序。 – OnResolve
你可以在這裏找到這個主題的一些有用的答案:** [通過JavaScript中的字段值對數組中的對象進行排序](http://stackoverflow.com/a/26759350/2247494)** – jherax