我试图对一组对象进行排序,但是我对其进行排序的属性事先并不知道。它存储为变量。
var items = [
{foo: "4", bar: "5"},
{foo: "7", bar: "1"},
{foo: "5", bar: "9"},
];
var whatToSort = "";
if (Math.random() > .5) {
whatToSort = "foo"
} else {
whatToSort = "bar"
};
items.sort(function(a, b){
return b.whatToSort - a.whatToSort;
};
如果我的sort()
函数返回b.bar - a.bar
,则会有效,但如果使用变量whatToSort
则不行。有没有办法做到这一点?
答案 0 :(得分:1)
您需要使用方括号表示法:
return b[whatToSort] - a[whatToSort];
否则,JS引擎会认为您正在比较字面上命名为" whatToSort"的属性。这是人们学习JavaScript时最常见的挂断之一。当您需要访问对象的属性,但在运行时不确定该属性是什么时,您需要使用方括号表示法。
var myObject = {
foo: 1,
bar: 2
};
var myKey = 'foo';
myObject.foo; // 1
myObject.bar; // 2
myObject.myKey; // undefined
myObject['foo']; // 1
myObject['bar']; // 2
myObject['myKey']; // undefined
myObject[myKey]; // 1