首页 > 解决方案 > 如果 value == null 则省略对象的键值

问题描述

使用下面显示的打字稿代码,它在 Firestore 数据库中创建新记录,如果值等于 null,是否可以省略(通过编写一行内联代码)键值对之一?

firestore.doc(`users/${user.uid}`).set({
   email: user.email,
   name: user.displayName,
   phone: user.phoneNumber, // (user.phoneNumber ? phone: user.phoneNumber), ... ?
   createdAt: firebase.firestore.FieldValue.serverTimestamp(),
});

标签: javascripttypescript

解决方案


您可以使用带有三元表达式的对象破坏来做到这一点:

firestore.doc(`users/${user.uid}`).set({
   email: user.email,
   name: user.displayName,
   ...(user.phoneNumber ? { phone: user.phoneNumber } : undefined),
   createdAt: firebase.firestore.FieldValue.serverTimestamp(),
});

它不是很优雅,但它可以在一行中完成它的工作:

const phone = null;

const obj = {
  name: 'Alice',
  age: 24,
  ...(phone ? { phone } : undefined),
};

console.log(obj);

编辑

根据ford04 提到的这个答案,它也可以像这样缩短:

 ...(user.phoneNumber && { phone: user.phoneNumber }),

再次编辑

但是最好正确检查它的类型,它可能会导致0并且""没有正确存储

 ...(![undefined, null].includes(user.phoneNumber) && { phone: user.phoneNumber })

推荐阅读