【问题标题】:JS Sorting array of objects by a variable property [duplicate]JS通过变量属性对对象数组进行排序[重复]
【发布时间】:2017-07-07 17:09:28
【问题描述】:

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

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,则无效。有没有办法做到这一点?

【问题讨论】:

    标签: javascript arrays sorting object


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-25
      • 1970-01-01
      • 2014-09-17
      • 2012-10-06
      • 1970-01-01
      • 1970-01-01
      • 2013-03-13
      • 2012-10-22
      相关资源
      最近更新 更多