json - 在dart中按字母顺序对对象的JSON数组以及属性的 bool 值进行排序

标签 json sorting dart

我有这样的对象数组

[
   {
      "contact_id":"ee76f661-91ff-5e6b-b900-79612065a840",
      "contact_name":"Bcd",
      "favorite":false,
   },
   {
      "contact_id":"da34621a-1355-5b6b-8ef5-e3bb60b2c28c",
      "contact_name":"Def",
      "favorite":true,
   },
   {
      "contact_id":"0900bd96-319b-577b-8d01-975347667108",
      "contact_name":"Abcd",
      "favorite":false,
   },
   {
      "contact_id":"0900bd96-319b-577b-8d01-975347667108",
      "contact_name":"Abcde",
      "favorite":true,
   }
]
我想按照contact_name的字母顺序对对象进行排序,而那些favorite为true的对象也应该从头开始。因此,在这种情况下,这就是排序后的数组的样子:
[
   {
      "contact_id":"0900bd96-319b-577b-8d01-975347667108",
      "contact_name":"Abcde",
      "favorite":true,
   },
   {
      "contact_id":"da34621a-1355-5b6b-8ef5-e3bb60b2c28c",
      "contact_name":"Def",
      "favorite":true,
   },
   {
      "contact_id":"0900bd96-319b-577b-8d01-975347667108",
      "contact_name":"Abcd",
      "favorite":false,
   },
   {
      "contact_id":"ee76f661-91ff-5e6b-b900-79612065a840",
      "contact_name":"Bcd",
      "favorite":false,
   },
]
现在,这是我用于排序的代码,由于我认为此方法是错误的,因此无法提供所需的结果
sortContacts(contacts) {
  contacts.sort((a, b) {
    return a['contact_name']
        .toString()
        .toLowerCase()
        .compareTo(b['contact_name'].toString().toLowerCase());
  });
  contacts.sort((a, b) {
    bool favorite1 = a['favorite'];
    bool favorite2 = b['favorite'];
    return (favorite1 == favorite2) ? 0 : favorite1 ? -1 : 1;
  });
  return contacts;
}
我有点坚持,任何帮助都会很棒!谢谢你的时间!

最佳答案

像这样的事情应该做的工作:

void main() {
  final contacts = [
    {
      "contact_id": "ee76f661-91ff-5e6b-b900-79612065a840",
      "contact_name": "Bcd",
      "favorite": false,
    },
    {
      "contact_id": "da34621a-1355-5b6b-8ef5-e3bb60b2c28c",
      "contact_name": "Def",
      "favorite": true,
    },
    {
      "contact_id": "0900bd96-319b-577b-8d01-975347667108",
      "contact_name": "Abcd",
      "favorite": false,
    },
    {
      "contact_id": "0900bd96-319b-577b-8d01-975347667108",
      "contact_name": "Abcde",
      "favorite": true,
    }
  ];

  contacts.sort((a, b) {
    final aFav = a['favorite'] as bool;
    final bFav = b['favorite'] as bool;

    if (aFav == bFav) {
      final aName = a['contact_name'] as String;
      final bName = b['contact_name'] as String;

      return aName.compareTo(bName);
    } else {
      return aFav ? -1 : 1;
    }
  });

  contacts.forEach(print);
  // {contact_id: 0900bd96-319b-577b-8d01-975347667108, contact_name: Abcde, favorite: true}
  // {contact_id: da34621a-1355-5b6b-8ef5-e3bb60b2c28c, contact_name: Def, favorite: true}
  // {contact_id: 0900bd96-319b-577b-8d01-975347667108, contact_name: Abcd, favorite: false}
  // {contact_id: ee76f661-91ff-5e6b-b900-79612065a840, contact_name: Bcd, favorite: false}
}

关于json - 在dart中按字母顺序对对象的JSON数组以及属性的 bool 值进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62893946/

相关文章:

javascript - 通过类型转换从 json 对象获取 Value

java - com.google.ads.AdView 实例化失败 - java.lang.ClassNotFoundException : org. json.JSONException

flutter - 一个构建函数返回null,有问题的小部件是:flutter_bloc包中的BlocBuilder <NotificationBloc,NotificationState>

flutter - 从一个类调用一个函数给我一个错误

javascript - 使用 MongoDB/Mongoose 在 Node 中执行 HTTP POST 请求?

php - 如何将 Doctrine 对象转换为 json

php - 未分析Elasticsearch无法在排序中工作

arrays - Swift 检查最大值并使用

pandas - 在 pandas 中按字符串和数字对 MultiIndex 列进行排序

http - Flutter http 客户端给出 FormatException : Unexpected character (at character 1) &lt;! DOCTYPE html>