如何推送对象值而不是数组中对象的引用

Posted

技术标签:

【中文标题】如何推送对象值而不是数组中对象的引用【英文标题】:How to push object value instead of reference of the object in array 【发布时间】:2022-01-17 19:00:21 【问题描述】:

我创建了一个对象并尝试将其推送到一个数组上。 当我第一次尝试在数组中添加一个对象时,它被完美地添加了,但是当我编辑对象并再次将对象推送到同一个数组时。但是数组中的两个值看起来都一样。

在数组中,它会推送我的对象的引用,当它发生变化时,也会反映在数组中。

能否请人帮我在数组中推送对象值而不是对象的引用?

void checkedItem(int id) 
    obj!.clear();
    obj = 
      "id": id,
      "items": 
        "artical": "",
        "item": "",
        "vol": "",
        "pc/ctm": "",
        "total": "",
        "option": false,
        "action": "",
      ,
    ;

    filterList!['special_cases'].forEach((data) 
      if (data['value'] == true) 
        temp.add(obj);
      
    );
    filterList!['categories'].forEach((data) 
      data['subCategories'].forEach((item) 
        if (item['value'] == true) 
          obj!['items']['item'] = item['name'];
          temp.add(obj);
        
      );
    );
    // print(temp);
    update();
  

  void addPhaseItem() 
    phaseData.add(temp);
    print(phaseData);
    Get.back();
    temp.clear();
    update();
   

【问题讨论】:

首先尝试识别列表中的 id 是否重复,如果没有,则添加新的 快速提问:这与 Firestore 有什么关系? (我同意@ArbiterChil,如果您使用的是通用对象,请检查该项目是否已存在于列表中) 【参考方案1】:

替换

temp.add(obj);

temp.add(...obj); // note the curly braces for maps and sets

在所有情况下。

"..." 是扩展运算符,允许您将一个集合中的项目插入另一个集合。你可以在 Dart Language Tour 页面上阅读更多关于它们的信息。

【讨论】:

不能解决同样的问题 这很奇怪,因为我编写的代码在 dartpad 上运行良好。你能告诉我你的其余代码吗?我想知道“checkedItem”在哪里被调用,以及你是否不小心覆盖了你自己的列表。

以上是关于如何推送对象值而不是数组中对象的引用的主要内容,如果未能解决你的问题,请参考以下文章

按值而不是按引用复制对象

指针的Boost序列化保存指针的十六进制值而不是对象的内容

如何从 Pandas DataFrame 中获取值而不是索引和对象类型

团结 |如何复制游戏对象的值而不是地址?

如何在java中深度复制对象。该对象可能是也可能不是可序列化的[重复]

如何按值而不是按引用将数组添加到列表中?