【问题标题】:How to sort a List using a object's properties as the list object and value as the order?如何使用对象的属性作为列表对象和值作为顺序对列表进行排序?
【发布时间】:2020-08-02 14:27:00
【问题描述】:

我在这里问了同样的问题 How to sort an ArrayList using a Map key as list object and value as the order?

但我需要 JavaScript 的等价物。我需要保持对象列表的顺序,因为它可以在我的 web 应用程序中随时更改和重新排序。

在我的模型中,我有一个对象数组列表示例

objectList = [object1, object2, object3, object4]

我将属于这个实例的每个对象的顺序保存到另一个对象示例中:

订购

{
   "object1":4,
   "object2":2,
   "object3":1,
   "object4":3
}

因此,我想根据对象 ID 作为键检索的订单对象属性中的值对列表进行排序:

预期结果:

[对象3,对象2,对象4,对象1]

在 Java 中这是可行的

objectList.sort(Comparator.comparing(o -> yourMap.get(o.getId()));

但是我不确定如何在 JavaScript 中实现同样的排序

编辑 只是为了澄清,我不想对订单对象进行排序。我想使用在订单对象中维护的顺序对我的 objectList 进行排序

【问题讨论】:

    标签: javascript sorting


    【解决方案1】:

    这可以解决问题,并通过使用对象 id 作为键来检索订单值。然后我们只是比较这些值进行排序

    this.objectList.sort(function(a, b)
        {
          if(order[a._id] > order[b._id]) return 1;
          if(order[b._id] > order[a._id]) return -1;
    
          return 0;
        });
    

    【讨论】:

      【解决方案2】:

      对象键的顺序永远无法保证。您可以使用 Object.values 然后 sort 它们创建对象值数组

      const data = {
        "object1": 4,
        "object2": 2,
        "object3": 1,
        "object4": 3
      };
      const sortedVal = Object.values(data).sort((a, b) => a - b);
      console.log(sortedVal)

      【讨论】:

      • 对不起,你误解了我想要达到的目标。我添加了一个编辑
      猜你喜欢
      • 1970-01-01
      • 2022-11-14
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      相关资源
      最近更新 更多