只有在定义了值时才有更好的方法将属性添加到对象:
const destination = {};
const value = getValue();
if (_(value).isObject()) { // In this case, I only want an object
destination.value = value;
}
在这种情况下,仅当destination.value
具有值时,value
属性才存在。有更好的方法吗?
答案 0 :(得分:3)
使用ES6,我喜欢进行条件传播:
const value = getValue()
const destination = {
...(value ? { value } : {})
}
你可以在三元组中做你需要的任何布尔检查。在您的情况下,检查value
是否为对象。
答案 1 :(得分:2)
您还可以使用Object(value) === value
进行对象测试,并使用Object.assign
执行条件分配:
Object.assign(destination, Object(value) === value && { value });
这是否“更好”是值得商榷的。选择您最喜欢的,最适合您的期望。
答案 2 :(得分:1)
if(typeof value != 'undefined')
除非你想排除null(null是javascript中的一个对象)。在那种情况下:
if(typeof value != 'undefined' && value !=null)
答案 3 :(得分:0)
就这样做,
const destination = {};
const value = getValue();
value && (destination.value = value); // here is the one liner way
这将确保值属性仅在定义 value 时才会创建
答案 4 :(得分:0)
另一种方法是将要添加的值放入数组中,并使用filter
和forEach
(或reduce
)将其添加到destination
宾语。
const destination = {}
const propsToAdd = [{ key: 'value', value: getValue() }]
propsToAdd
.filter(data => _.isObject(data.value))
.forEach(data => destination[data.key] = data.value);
这样你也可以在filter
中为对象添加一个函数,以验证其他类型而不仅仅是对象。