当前位置: 首页 > 知识库问答 >
问题:

仅更新非空字段|对象传播

储修谨
2023-03-14

我想知道是否有一个衬里可能像这样

        let updatedUser;
        if (firstName) {
            updatedUser = { ...userData, firstName };
        }
        if (lastName) {
            updatedUser = { ...userData, lastName };
        }
        if (password) {
            updatedUser = { ...userData, password };
        }

我只是检查名字、姓氏等是否为空。如果我有几个这样的字段呢?

因此,如果我写入,我不想用空值更新任何字段

updatedUser = { ...userData, firstName, lastName, password  };

如果我的字段为空,是否有任何可能的替代方案可以告诉object spread或任何其他内容不要更新?

共有2个答案

龚昊然
2023-03-14

不太可能,但是你可以使用一个小助手:

 const assignDefined = (target, props) =>
   Object.entries(props).forEach(([k, v]) => v && (target[k] = v));

这样你就可以写:

updateUser = assignDefined({...userData}, { firstName, lastName, password });
欧阳俊明
2023-03-14

您可以使用

const updatedUser = Object.assign({},
     userData,
     firstName && {firstName},
     lastName && {lastName},
     password && {password}
);

或类似于对象扩展语法:

const updatedUser = {
     ...userData,
     ...firstName && {firstName},
     ...lastName && {lastName},
     ...password && {password}
};

虚假值将被忽略,并且不会导致任何属性的创建。

 类似资料:
  • 我已经搜索和尝试了许多答案,但我似乎无法让这个工作。我在MongoDB中有一个用户(db.users...)我试图在一个特定的文档中更新一个名为“角色”的字段。如果我执行: assert失败:需要对象错误:在printStackTrace(src/mongo/shell/utils.js:37:15)在doassert(src/mongo/shell/assert.js:6:5)在assert(s

  • 问题内容: 我有一个包含用户数据的类,如下所示: 我需要计算非字段,以显示用户已填充的配置文件的百分比。还有一些,我不希望在百分比计算要考虑几个字段:,和。 一种简单的方法是使用多个语句来获取非null字段,但这将涉及大量样板代码,并且还有一个我需要显示完成百分比的类。因此,我创建了一个实用程序函数,如下所示: 然后我按如下所示调用此函数: 我的问题是,这是我不算数字段还是可以进一步改进的最佳方法

  • 我们的REST API接收一些JSON对象输入,其中一些字段要求为非空。这些可以是String/Intger,甚至可能是其他一些类实例作为引用。 我们试图找到一种方法来强制这些字段不为null,而不是API中null检查的正确方法。当前: 我们想要的是: 我们尝试了3件事: 1) 升级至jackson 2.0.6并使用annotation com。fasterxml。杰克逊。注释。JsonProp

  • 我使用了Gson,但我需要转换器只序列化非空值或非空值。 例如: 现在,将该对象转换为json的Gson实例如下所示

  • 我正在使用Android MVVM架构和LiveData。我有一个这样的物体 我的视图模型是这样的 如何确保用户对象中的某个字段发生更改时,观察员收到通知?顺便说一句,重要的是要将这些数据保存在单独的对象中,而不是在ViewModel中使用字符串等主要值。

  • 问题内容: 是否有更新的方式只有一些领域使用该方法的实体对象从春数据JPA? 例如,我有一个这样的JPA实体: 通过其CRUD存储库: 在Spring MVC中,我有一个控制器,该控制器获取用于更新它的对象: 我知道我可以使用来加载用户findOne,然后更改其名称并使用save…来更新它。但是,如果我有100个字段,而我想更新其中的50个字段,则更改每个值可能会很烦人。 有没有办法告诉类似“ 保