2017-07-07 4 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; 
}; 

変数whatToSortが使用されている場合は、私のsort()機能がb.bar - a.barを返しますがない場合、これは動作します。これを行う方法はありますか?

return b[whatToSort] - a[whatToSort]; 

そうでない場合は、JSエンジンは、あなたが文字通り「whatToSort」と命名されている特性を比較していると考えて:

答えて

1

あなたは角括弧表記を使用する必要があります。これは、JavaScriptを学ぶときに人々が持つ最も一般的なハングアップの1つです。オブジェクトのプロパティにアクセスする必要があるが、実行時までそのプロパティがどうなるかわからないときは、角括弧の表記法を使用する必要があります。

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 
関連する問題