我在Javascript中有一个数组,里面有一个对象。我需要根据从最大到最小的属性对它们进行排序。
我找不到不使用无法使用的Array.sort的解决方案。
类似数组的示例:
var arr = [{"name" : "bob", "age", 45}, {"name" : "Joe", "age" : 35}, {"name" : "Amy", "age" : 20}];
我想根据年龄(从大到小)进行排序,而不使用array.sort。
答案 0 :(得分:2)
考虑到arr对象数组,您可以通过传递任何属性来对arr进行排序。
尝试以下操作:
var arr = [{"name" : "bob", "age": 45}, {"name" : "Joe", "age" : 35}, {"name" : "Amy", "age" : 20}];
function sortArray(arr,prop){
arr.sort((a,b)=>{
if(typeof a[prop] ==='string')
return b[prop].localeCompare(a[prop]);
return b[prop] - a[prop];
});
}
//Sort array based on name
sortArray(arr,"name");
console.log(arr);
//Sort array based on age
sortArray(arr,"age");
console.log(arr);
答案 1 :(得分:0)
如果您不想使用sort
,则可以通过for
循环来实现旧的排序方式。例如,以下是insertion sort降序排列(从最大到最小):
var arr = [{"name" : "Joe", "age" : 35}, {"name" : "Amy", "age" : 20}, {"name" : "bob", "age" : 45}];
function insertionSort (items) {
var len = items.length;
for (var i = 1; i < len; i++) {
var tmp = items[i];
for (var j = i - 1; j >= 0 && (items[j]['age'] > tmp['age']); j--) {
items[j + 1] = items[j];
}
items[j + 1] = tmp;
}
arr = arr.reverse();
}
insertionSort(arr);
console.log(arr);