跟随地图,将两个键值对都设为动态,编写一个逻辑来过滤 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)
我这样做是为了方便使用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)
| 归档时间: |
|
| 查看次数: |
6227 次 |
| 最近记录: |