2017-07-07 188 views
-1

我想排序对象数组,但我排序的属性是事先不知道的。它存储为一个变量。JS通过变量属性对对象数组排序

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使用。有没有办法做到这一点?

回答

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 
相关问题