Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有条件地向对象添加键/值对的最佳方法是什么_Javascript - Fatal编程技术网

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的键,还取决于每个值都是一个数组。这只是我如何解决这个问题的一个想法。提问者自己担心验证,因为没有人比他更了解真实的结构。