JS通过变量属性

时间:2017-07-07 17:09:28

标签: javascript arrays sorting object

我试图对一组对象进行排序,但是我对其进行排序的属性事先并不知道。它存储为变量。

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 个答案:

答案 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