我正在开发一个小型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
}
}
有没有办法动态创建数据对象?
答案 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,则将无法使用