javascript - 过滤掉 null 或未定义的属性
问题描述
我有一个财产bar
可以是undefined
或null
const result = {
foo1: 'foo1',
foo2: 'foo2',
foo3: 'foo3',
bar: await some?.http?.request?.that?.can?.be?.undefined?.or?.null
}
// outputs this
const result: {
foo1: 'foo1',
foo2: 'foo2',
foo3: 'foo3',
bar: undefined /// -> How to prevent this from being added
}
我知道我能做到
const result: {
foo1: 'foo1',
foo2: 'foo2',
foo3: 'foo3',
}
const bar = await some?.http?.request?.that?.can?.be?.null?.or?.undefined
if (bar != null) {
result.bar = bar
}
但是有更短的(语法)方式吗?
此外,如果这种方法一旦定义result
就行不通immutable
解决方案
您可以bar
通过首先计算的值有条件地添加bar
(就像您在第二个示例中一样):
const bar = await some?.http?.request?.that?.can?.be?.undefined?.or?.null
然后,当您创建时,result
您使用三元条件运算符返回一个对象{bar: <value>}
或一个空对象{}
,然后您可以使用扩展语法将其合并到结果对象中:
const bar = await some?.http?.request?.that?.can?.be?.undefined?.or?.null
const result = {
foo1: 'foo1',
foo2: 'foo2',
foo3: 'foo3',
...(bar != null ? {bar} : {})
}
请参阅以下示例:
const bar1 = null;
const result1 = {
foo1: 'foo1',
foo2: 'foo2',
foo3: 'foo3',
...(bar1 != null ? {bar: bar1} : {})
};
console.log("bar 'null':", result1);
const bar2 = undefined;
const result2 = {
foo1: 'foo1',
foo2: 'foo2',
foo3: 'foo3',
...(bar2 != null ? {bar: bar2} : {})
};
console.log("bar 'undefined':", result2);
const bar3 = "foo4";
const result3 = {
foo1: 'foo1',
foo2: 'foo2',
foo3: 'foo3',
...(bar3 != null ? {bar: bar3} : {})
};
console.log("bar 'foo4':", result3);
推荐阅读
- javascript - 有没有其他方法可以重置字段
- jquery - MVC JQuery/AJAX 如何将数组发送到控制器
- apache - 使用 HTAaccess 更改网站链接
- ios - 在搜索路径中找不到包含的文件“Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig”
- haskell - 从 Repa 数组中提取向量
- c - BST 中的删除节点函数
- vb.net - VB.NET - 如何阻止 Windows 窗体上的用户输入而不使其变灰?
- c - 计算C语言程序中的折扣
- python - sklearn.roc_auc_score() 和 sklearn.plot_roc_curve() 的区别
- memory - 为什么原始部分不对应于任何一种字节序?