仅在定义值

时间:2018-02-07 16:15:06

标签: javascript ecmascript-6 lodash

只有在定义了值时才有更好的方法将属性添加到对象:

const destination = {};
const value = getValue();

if (_(value).isObject()) { // In this case, I only want an object
    destination.value = value;
}

在这种情况下,仅当destination.value具有值时,value属性才存在。有更好的方法吗?

5 个答案:

答案 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)

另一种方法是将要添加的值放入数组中,并使用filterforEach(或reduce)将其添加到destination宾语。

const destination = {}
const propsToAdd = [{ key: 'value', value: getValue() }]

propsToAdd
 .filter(data => _.isObject(data.value))
 .forEach(data => destination[data.key] = data.value);

这样你也可以在filter中为对象添加一个函数,以验证其他类型而不仅仅是对象。