Javascript 有条件地向对象添加键/值对的最佳方法是什么
我正在向后端发送一些数据,我只想在包含值时将键/值对添加到表单数据中 目前,如果这些值的长度大于零,我会有条件地添加它们Javascript 有条件地向对象添加键/值对的最佳方法是什么,javascript,Javascript,我正在向后端发送一些数据,我只想在包含值时将键/值对添加到表单数据中 目前,如果这些值的长度大于零,我会有条件地添加它们 const personDetails = this.personDetails; let formData = {} if (personDetails.email.length) { formData.email = personDetails.email; } if (personDetails.phone.length) { formData.phone =
const personDetails = this.personDetails;
let formData = {}
if (personDetails.email.length) {
formData.email = personDetails.email;
}
if (personDetails.phone.length) {
formData.phone = personDetails.phone;
}
axios.put(url, formData).then(() => blah);
是否有一种不太详细的方法来执行此操作?您可以使用条件运算符一次性声明对象:
const { email, phone } = this.personDetails;
const formData = {
email: email.length ? email : undefined,
phone: phone.length ? phone : undefined
};
这并不是严格等同于您的原始代码,因为在这里,属性将存在于对象上,而不管是否满足条件,关联的值都将是未定义的。但由于结果在发送时会被字符串化,所以这不应该成为问题
如果formData在其他地方使用,并且您显式地迭代属性,那么您必须首先确保与属性关联的值不是未定义的。我实际上建议不要使用If语句进行条件赋值:
formData.email = personDetails.email;
formData.phone = personDetails.phone;
相反,只要始终分配电子邮件和电话,即使它们是空的或空的。接收输入JSON的服务器端应用程序最有可能使用的模型期望这些字段存在,即使未分配。即使不添加电子邮件或电话密钥,您也会获得相当小的收益。如果有很多字段可以使用,您可以使用循环,这样就不必重复If语句
["email", "phone", ...].forEach(field => {
if (personDetails[field].length) {
formData[field] = personDetails[field];
}
});
下面是检查长度是否等于或大于所需长度的快速方法
var minLength = 6;
for (var key in personDetails) {
if (personDetails[key].length >= minLength) {
formData[key] = personDetails[key];
}
}
我不这么认为。您可以迭代对象并检查每个键和值对,而不是单独指定它们。不记得我是从书上还是网站上得到的。我通过搜索其中一条评论找到了一个在线参考。在这种情况下,他可以简单地使用formData={email:personDetails.email,phone:personDetails.phone};这取决于personDetails只包含需要添加到formData的键,还取决于每个值都是一个数组。这只是我如何解决这个问题的一个想法。提问者自己担心验证,因为没有人比他更了解真实的结构。