You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Dart的List<Map>中根据id替换指定元素的time值?

修改Dart列表中指定元素的字段值

嘿,这事儿其实挺简单的,我给你分享几种实用的实现方式,你可以根据自己的场景来选:

方法一:遍历列表直接修改(最直观)

这种方式适合你的当前场景,因为Dart里的Map是引用类型,遍历的时候直接修改字段就会同步到原列表里:

void main() {
  List<Map<String, dynamic>> products = [
    {'id': 24, 'time': '2019-11-24 00:00:00.000'},
    {'id': 36, 'time': '2019-11-23 00:00:00.000'},
    {'id': 48, 'time': '2019-11-24 00:00:00.000'},
  ];

  // 遍历列表,匹配到id为48的元素就修改time字段
  products.forEach((product) {
    if (product['id'] == 48) {
      product['time'] = '2019-10-26 00:00:00.000';
    }
  });

  // 打印验证结果
  print(products);
}

方法二:通过索引定位修改(更灵活)

如果之后还需要用到这个元素的位置,或者想避免遍历整个列表(虽然数据量小的时候差别不大),可以先找到元素的索引再修改,还能加个判断避免找不到元素时报错:

void main() {
  List<Map<String, dynamic>> products = [
    {'id': 24, 'time': '2019-11-24 00:00:00.000'},
    {'id': 36, 'time': '2019-11-23 00:00:00.000'},
    {'id': 48, 'time': '2019-11-24 00:00:00.000'},
  ];

  // 找到第一个id为48的元素的索引
  int targetIndex = products.indexWhere((product) => product['id'] == 48);
  
  // 检查索引有效(找不到元素时indexWhere返回-1)
  if (targetIndex != -1) {
    products[targetIndex]['time'] = '2019-10-26 00:00:00.000';
  }

  print(products);
}

方法三:生成新列表(适合不可变数据场景)

如果你的列表是不可变的(比如用List.unmodifiable创建的),或者想保留原数据不变,就用map生成一个新列表,注意这里要创建新的Map避免修改原数据:

void main() {
  List<Map<String, dynamic>> products = [
    {'id': 24, 'time': '2019-11-24 00:00:00.000'},
    {'id': 36, 'time': '2019-11-23 00:00:00.000'},
    {'id': 48, 'time': '2019-11-24 00:00:00.000'},
  ];

  // 生成新列表,仅修改目标元素的time字段
  List<Map<String, dynamic>> updatedProducts = products.map((product) {
    if (product['id'] == 48) {
      // 展开原Map并替换time字段,创建新Map
      return {...product, 'time': '2019-10-26 00:00:00.000'};
    }
    return product;
  }).toList();

  print(updatedProducts);
}

内容的提问来源于stack exchange,提问作者Jan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:53:28