我创建了一个对象数组,并且能够按对象的一个属性进行排序(参见底部代码)。但我硬编码要排序的属性(在本例中为“name”)。我怎样才能将我想要排序的属性传递给sort方法?我尝试了tmpArray.sort(函数(a,b,sortBy)但是没有响应你的汤。我知道我可以用
修改数组对象array.prototype.thing = function(){ alert("hello world"); }
但是我可以修改现有的方法,比如array.sort吗?感谢。
$(document).ready(function(){
$(".sort").click(function() {
var tmpArray = new Array;
for (i=0; i<5; i++) {
var tmpObject = new Object;
switch(i) {
case 0 :
tmpObject.name = "Amy";
tmpObject.rank = 1;
tmpObject.priority = 3;
tmpObject.item = "Blue Item";
break;
case 1 :
tmpObject.name = "Jen";
tmpObject.rank = 2;
tmpObject.priority = 0;
tmpObject.item = "Red Item";
break;
case 2 :
tmpObject.name = "Mike";
tmpObject.rank = 3;
tmpObject.priority = 2;
tmpObject.item = "Green Item";
break;
case 3 :
tmpObject.name = "Raul";
tmpObject.rank = 4;
tmpObject.priority = 2;
tmpObject.item = "Yellow Item";
break;
case 4 :
tmpObject.name = "Lola";
tmpObject.rank = 5;
tmpObject.priority = 1;
tmpObject.item = "Blue Item";
break;
}
tmpArray.push(tmpObject);
}
tmpArray.sort(function(a, b) {
var nameA=a.name.toLowerCase(), nameB=b.name.toLowerCase()
if (nameA < nameB) //sort string ascending
return -1
if (nameA > nameB)
return 1
return 0 //default return value (no sorting)
});
console.log(tmpArray);
});
});
答案 0 :(得分:3)
快速示例,这样的事情应该有效。 arr
是要排序的数组,key
是要使用的Object键。请注意,这只是一级深度排序。
var arr = [
{"one" : Math.random(), "two" : Math.random(), "id" : "First"},
{"one" : Math.random(), "two" : Math.random(), "id" : "Second"},
{"one" : Math.random(), "two" : Math.random(), "id" : "Third"}
];
var oSort = function (arr, key) {
arr.sort(function(a, b) {
a = a[key], b = b[key];
return a > b ? 1 : a < b ? -1 : 0;
});
};
oSort(arr, 'two');
编辑回答
但是我可以修改现有的方法,比如array.sort吗?感谢。
是的,这是可能的,但不要这样做。如果你想覆盖它,你可以做
Array.prototype.sort = function() { ...
答案 1 :(得分:1)
您可以编写a[someString]
来获取someString
变量中命名的属性。
答案 2 :(得分:-1)
你的排序似乎在这里工作正常: