首页 > 解决方案 > 如何从 Dart 中的映射中过滤空值

问题描述

在地图之后,将两个键值对都设为动态,编写一个逻辑以在没有我们的情况下过滤 Map 中的所有空值?

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

我需要删除所有为空的值并返回地图

Map<String, dynamic> toMap() {
 return {
  'firstName': this.firstName,
  'lastName': this.lastName
};

标签: dart

解决方案


使用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}
}

如果你想把它作为你toMap()方法的一部分,你可以用级联运算符做这样的事情:

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

class A {
  final String? firstName;
  final String? lastName;

  A(this.firstName, this.lastName);

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

推荐阅读