2017-07-07 242 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 
相關問題