我正在尝试从服务器请求一些数据。当我将属性的模型更改为未定义时,此“未定义”字符串将在查询字符串中发送。
let filterModel = new GroupFilterModel();
filterModel.status = anycondition ? "opened" : undefined;
this.http.get<GroupModel[]>("apiurl", { params: filterModel });
Run Code Online (Sandbox Code Playgroud)
发送的查询字符串是这样的:
apiurl?status=undefined
Run Code Online (Sandbox Code Playgroud)
我想避免发送状态变量。我怎么会有这种行为?
假设我有以下JS对象
data = {
name: "John",
dataOfBirth: "",
externalId: 2548,
email: "john@email.com",
mobile: ""
}
Run Code Online (Sandbox Code Playgroud)
我将收到这样一个对象,具有很多属性可以是String,Integer或undefined。为了更新数据库,我无法用空信息覆盖有效信息。
我可以尝试if (data.email === "") delete data.email所有这些方法,但是要维持这种方法似乎不切实际。
有什么方法可以扫描所有属性,而不必命名每个属性并删除所有空/未定义的属性?
作为参考从 Javascript 中的对象中删除空白属性,如何使其兼容 Typescript?
JS 函数(嵌套对象 | ES10):
function removeEmpty(obj) {
return Object.fromEntries(
Object.entries(obj)
.filter(([_, v]) => v != null)
.map(([k, v]) => [k, v === Object(v) ? removeEmpty(v) : v])
);
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试过Exclude<T, null>,但它不适用于嵌套对象,并且我认为这不是正确的实用程序。
请注意,返回的类型应删除null类型但保留undefined。
示例/预期行为:
type TestType = {
a?: {
b?: {
c: string;
} | null;
z?: {
x: string;
};
} | null;
};
const testObj: TestType = {
a: {
b: null,
z: { …Run Code Online (Sandbox Code Playgroud) axios.get(globalConfig.FAKE_API, {
params: {
phone: this.phone,
mail: this.mail
},
})
.then((resp) => {
this.req = resp.data
})
.catch((err) => {
console.log(err)
})
Run Code Online (Sandbox Code Playgroud)
Is there any way I can make conditional parameters when doing GET / POST requests with Axios? For example, if my mail parameter is empty, i won't send an empty parameter, like: someurl.com?phone=12312&mail=
我有这个对象:
this.prepaidObject = {
'customerType' : this.prepaidDetailForm.prepaidDetails.customerType,
'firstName' : this.prepaidDetailForm.prepaidDetails.firstName,
'lastName' : this.prepaidDetailForm.prepaidDetails.lastName,
'note' : this.prepaidDetailForm.prepaidDetails.note,
'created': this.prepaidDetailForm.prepaidDetails.created
};
Run Code Online (Sandbox Code Playgroud)
现在有时某些属性是未定义的。我想要的是如果this.prepaidDetailForm.prepaidDetails未定义属性之一不显示它们。因此,例如,如果this.prepaidDetailForm.prepaidDetails.firsName未定义,我不需要创建'firstName'属性 isnide 对象。任何建议我该怎么做?