JSON.parse(JSON.stringify()) code
时间: 2024-06-19 12:03:48 浏览: 158
JSON.parse(JSON.stringify()) 是一种常用的数据类型转换方法,主要作用是将一个 JavaScript 对象序列化为 JSON 字符串,然后再将其解析为一个新的 JavaScript 对象。这种方法可以用于深拷贝对象,即创建一个与原始对象完全相同的新对象,而不是引用原始对象。
举个例子,如果我们有一个 JavaScript 对象 obj,并且想要创建一个与 obj 完全相同的新对象 newObj,可以使用以下代码:
```
var newObj = JSON.parse(JSON.stringify(obj));
```
需要注意的是,这种方法只适用于能够被 JSON 序列化的对象。对于不能被序列化的对象(如包含函数、正则表达式等),该方法会抛出异常。
相关问题
var net = require("net"); var config = require("./config"); var client = net.createConnection({ port:config.port, host:config.host, }); var username; client.on("connect",function () { console.log("请输入用户名:"); process.stdin.on("data",function (data) { data = data.toString().trim(); if (!username){ var send = { mstype:"signup", username:data }; client.write(JSON.stringify(send)); return; } var regex = /(.{1,18}):(.+)/; var matches = regex.exec(data); if(matches){ var from = username; var to = matches[1]; var message = matches[2]; var send = { mstype:"p2p", from:username, to:to, message:message }; client.write(JSON.stringify(send)); }else{ var send = { mstype:"broadcast", from:username, message:data, }; client.write(JSON.stringify(send)); }; }); }); client.on("data",function (data) { data=JSON.parse(data); switch(data.mstype){ case "signup": var code=data.code; switch(code){ case 1000: username=data.username; console.log(data.message); break; case 1001: console.log(data.message); break; default: break; } break; case "broadcast": console.log(data.message); break; case "p2p": var code=data.code; switch(code){ case 2000: console.log(data.message); break; case 2001: console.log(data.message); break; default: 这段代码中,正则表达式匹配的东西是什么,正则表达式中的()作用是什么,matches[0]、matches[1]、matches[2]内容分别是什么,详细回答以上问题
这段代码中的正则表达式 `/(.{1,18}):(.+)/` 是用来匹配用户输入的消息内容的。其中,`.` 表示匹配任意单个字符,`{1,18}` 表示匹配长度为 1 到 18 的任意字符,`:` 表示匹配冒号,`(.+)` 表示匹配长度为 1 到无限长的任意字符,`()` 的作用是分组,将匹配到的内容分成多个组。
当用户输入的消息内容符合正则表达式时,`matches` 变量会保存匹配到的内容,其中 `matches[0]` 表示整个匹配到的字符串,`matches[1]` 表示第一个分组匹配到的内容(即收件人的用户名),`matches[2]` 表示第二个分组匹配到的内容(即消息内容)。如果用户输入的消息内容不符合正则表达式,则 `matches` 变量为 null。
在代码中,如果 `matches` 变量存在,则将消息发送给指定的收件人;否则,则将消息广播给所有在线用户。
小a优化这一段代码: const startSubmit = async () =>{ let empNo = form.data.empNo; let res = await personnelTrainQueryByempNo({empNo}); if (res.data) { if (res.data.trainStatus === 0){ promptContent.value = '该人员已在待上岗列表中'; promptDialog.value.open(); } else { promptContent.value = '该人员正在培训中,请培训结束后新增'; promptDialog.value.open(); } return } if (form.data.empState === 0){ let flag = personRes.data?.dataSource.some((item)=>{ return item.userCode === empNo; }) if (flag){ promptContent.value = '该员工编号与老员工相同,请检查人员身份'; promptDialog.value.open(); return; } } formData.value.submit(async (res) =>{ let sumbit = JSON.parse(JSON.stringify(form.data)); sumbit.trainStatus = 0; sumbit.createdName = uni.getStorageSync("userInfo").name; let resMsg = await personnelTrainAdd(sumbit); if (afterSubmit(resMsg)){ // 提交重新定向 uni.switchTab({ url:"/pages/tabPages/allPages/index", success:()=>{ // 提交成功后,跳转回主页面 uni.navigateTo({ url:"/pages/qualityPages/personnelTrain/index", }); } }) } }) }
好的,以下是对这段代码的优化建议:
1. 减少 API 调用次数:在这段代码中,使用了多次 API 调用,这样会增加网络请求的次数,导致页面加载速度变慢。为了减少 API 调用次数,可以将多个 API 调用合并成一个,这样可以减少网络请求的次数。
2. 使用 async/await:在这段代码中,使用了回调函数来处理表单提交的结果,这样代码的可读性会变差。为了提高代码的可读性,可以使用 async/await 来处理表单提交的结果,这样代码会更加简洁和易读。
3. 提取公共逻辑:在这段代码中,有一些逻辑是重复的,可以将其提取出来,封装成函数,这样可以提高代码的复用性和可读性。
4. 缩短函数长度:在这段代码中,函数的长度比较长,可以将其拆分成多个小函数,这样可以提高代码的可读性和可维护性。
根据上述建议,以下是对该代码的优化后的示例代码:
```javascript
const startSubmit = async () => {
const empNo = form.data.empNo;
const res = await personnelTrainQueryByempNo({ empNo });
if (res.data) {
const trainStatus = res.data.trainStatus;
if (trainStatus === 0) {
promptContent.value = "该人员已在待上岗列表中";
} else {
promptContent.value = "该人员正在培训中,请培训结束后新增";
}
promptDialog.value.open();
return;
}
if (form.data.empState === 0) {
const flag = checkUserCode(empNo);
if (flag) {
promptContent.value = "该员工编号与老员工相同,请检查人员身份";
promptDialog.value.open();
return;
}
}
const sumbit = getSubmitData();
const resMsg = await submitFormData(sumbit);
if (afterSubmit(resMsg)) {
uni.switchTab({
url: "/pages/tabPages/allPages/index",
success: () => {
uni.navigateTo({
url: "/pages/qualityPages/personnelTrain/index",
});
},
});
}
};
const checkUserCode = (empNo) => {
const personRes = getPersonnelRes();
const dataSource = personRes.data?.dataSource;
return dataSource?.some((item) => item.userCode === empNo);
};
const getPersonnelRes = () => {
return await personnelQueryByCompanyId({
companyId: uni.getStorageSync("userInfo")?.companyId,
});
};
const getSubmitData = () => {
const sumbit = JSON.parse(JSON.stringify(form.data));
sumbit.trainStatus = 0;
sumbit.createdName = uni.getStorageSync("userInfo")?.name;
return sumbit;
};
const submitFormData = async (sumbit) => {
return await personnelTrainAdd(sumbit);
};
```
通过这些优化,可以使代码更加简洁易读,同时能够提高代码的可维护性和复用性。
阅读全文