当对象不为null时,将属性添加到对象

时间:2016-11-17 10:26:29

标签: javascript typescript javascript-objects

我正在开发一个小型API,我想尝试使用HTTP PATCH REQUEST更新数据,而不使用一堆if语句。我正在尝试仅使用更改的数据填充传出数据对象。

update() {
    let prop1 = hasBeenChanged.prop1 ? changedData.prop1 : null;
    // ...
    let propN = hasBeenChanged.propN ? changedData.propN : null;

    let data: IPatchProfile = {
        // something like --> property != null ? property: property.value : nothing
    }
}

有没有办法动态创建数据对象?

3 个答案:

答案 0 :(得分:7)

根据您使用的JS版本,您可以使用传播运算符...

const getData = data => ({
  ...data.first  && { 'Custom First Prop Name': data.first },
  ...data.second && { 'Custom Second Prop Name': data.second },
  ...data.third  && { third: data.third },
  ...data.fourth && { fourth: data.fourth },
});

答案 1 :(得分:6)

您可以使用Object.assign

let data = Object.assign({},
  first === null ? null || {first},
  ...
);

这是有效的,因为Object.assign会跳过null个参数。

如果您确定该属性值不会是" falsy",那么写入会更短:

let data = Object.assign({},
  first && {first},
  ...
);

假设对象将在某个时刻进行字符串化,因为字符串化会忽略未定义的值,您也可以尝试

let data = {
  first: first === null ? undefined : first,
  ...
}

答案 2 :(得分:2)

非在线解决方案

如果您不需要内联添加值,则编写这样的赋值非常简单明了。

const val1 = 1
const val2
const data = {}

val1 && (data.a = val1) // 1
val2 && (data.b = val2) // Not added
// data = { a : 1 }

注意:如果该值为falsey,则将无法使用