如何从 Dart 中的地图中过滤空值

You*_*lid 7 dart

跟随地图,将两个键值对都设为动态,编写一个逻辑来过滤 Map 中没有我们的所有空值?

除了遍历整个地图并过滤掉值(遍历整个地图并获取条目对象并丢弃这些对)之外,还有其他方法吗?

我需要删除所有为空的值并返回映射

Map<String, dynamic> toMap() {
 return {
  'firstName': this.firstName,
  'lastName': this.lastName
};
Run Code Online (Sandbox Code Playgroud)

jul*_*101 20

使用removeWhereonMap删除要过滤的条目:

void main() {
  final map = {'text': null, 'body': 5, null: 'crap', 'number': 'ten'};

  map.removeWhere((key, value) => key == null || value == null);

  print(map); // {body: 5, number: ten}
}
Run Code Online (Sandbox Code Playgroud)

如果您想将其作为toMap()方法的一部分,您可以使用级联运算符执行以下操作:

void main() {
  print(A(null, 'Jensen').toMap()); // {lastName: Jensen}
}

class A {
  final String firstName;
  final String lastName;

  A(this.firstName, this.lastName);

  Map<String, dynamic> toMap() {
    return <String, dynamic>{
      'firstName': this.firstName,
      'lastName': this.lastName
    }..removeWhere(
        (dynamic key, dynamic value) => key == null || value == null);
  }
}

Run Code Online (Sandbox Code Playgroud)


lrn*_*lrn 17

您现在可以使用带有条件条目的映射文字:

Map<String, dynamic> toMap() => {
  if (firstName != null) 'firstName': firstName,
  if (lastName != null) 'lastName': lastName,
};

Run Code Online (Sandbox Code Playgroud)


Jor*_*eña 5

我这样做是为了方便使用removeWhere从地图列表中删除空值: https: //dartpad.dartlang.org/52902870f633da8959a39353e96fac25

样本:


final data = 
  {
    "name": "Carolina Ratliff",
    "company": null,
    "phone": "+1 (919) 488-2302",
    "tags": [
      "commodo",
      null,
      "dolore",
    ],
    "friends": [
      {
        "id": 0,
        "name": null,
        "favorite_fruits": [
          'apple', null, null, 'pear'
        ]
      },
      {
        "id": 1,
        "name": "Pearl Calhoun"
      },
    ],
  };

void main() {
  // From map
  print('Remove nulls from map:\n' + data.removeNulls().toString());
  // From list
  print('\nRemove nulls from list:\n' + [data].removeNulls().toString());
}
Run Code Online (Sandbox Code Playgroud)