Javascript 需要知道如何对对象使用“扩展”操作符
我有一个reactJS应用程序,想知道是否有更简单的方法将我的状态对象分配给rest返回的数据。也许使用扩展运算符Javascript 需要知道如何对对象使用“扩展”操作符,javascript,reactjs,Javascript,Reactjs,我有一个reactJS应用程序,想知道是否有更简单的方法将我的状态对象分配给rest返回的数据。也许使用扩展运算符 state = { recordid: "", companyname: {val:"",err:""}, address: {val:"",err:""}, telephone: {val:[],err:""}, email: {val:[],err:""}, taxid: {val:
state = {
recordid: "",
companyname: {val:"",err:""},
address: {val:"",err:""},
telephone: {val:[],err:""},
email: {val:[],err:""},
taxid: {val:"",err:""},
weburl: {val:"",err:""},
loading: true
}
从服务器返回的数据如下所示:
{
"address": "9242 Kropf Court\nTulsa, OK 74133",
"balance": "1937.2400",
"companyname": "HUB Pharmaceuticals, LLC",
"email": [
{
"emailaddress": "lespinha4r@salon.com",
"emailname": "Lizbeth Espinha",
"recordid": "ea18a1b3-860d-45ed-a6bc-b5208dcfbac7"
}
],
"recordid": "fe435915-0e5c-4165-80ca-28c69a5d1ed8",
"taxid": "132798707",
"telephone": [
{
"phonename": "Office",
"phonenumber": "9185499797",
"recorder": 1,
"recordid": "9fd70f31-b450-465b-aec4-39f47ec6e883"
}
],
"weburl": "https://delicious.com"
}
我的意图是将RESTapi返回的值赋给匹配的状态变量,但赋给相应的“val”变量。这可以用spread操作符完成吗?它并不漂亮,但您可以使用它来获取感兴趣的属性:
state = {
recordid: "",
companyname: {val:"",err:""},
address: {val:"",err:""},
telephone: {val:[],err:""},
email: {val:[],err:""},
taxid: {val:"",err:""},
weburl: {val:"",err:""},
loading: true
}
const parseResponseObject=({
recordid,
公司名称,
地址:,
电话,,
电子邮件,
出租车,
weburl,
}) => ({
recordid,
公司名称:{val:companyname,错误:'},
地址:{val:address,错误:“”,
电话:{val:电话,错误:'},
电子邮件:{val:email,错误:'},
taxid:{val:taxid,错误:“”,
weburl:{val:weburl,错误:'},
加载:对,
})
常数响应={
地址:'9242克洛夫法院\n北卡罗来纳州图尔萨74133',
余额:“1937.2400”,
公司名称:“HUB Pharmaceuticals,LLC”,
电邮:[
{
电子邮件地址:'lespinha4r@salon.com',
emailname:'Lizbeth Espinha',
记录ID:'ea18a1b3-860d-45ed-a6bc-b5208dcfbac7',
},
],
记录ID:'fe435915-0e5c-4165-80ca-28c69a5d1ed8',
的士:132798707,
电话:[
{
电话名:'办公室',
电话号码:“9185499797”,
录音机:1,
记录ID:'9fd70f31-b450-465b-aec4-39f47ec6e883',
},
],
网址:'https://delicious.com',
}
常量结果=parseResponseObject(响应)
console.log(结果)
这有帮助吗
const数据={
“地址”:“9242克洛夫法院\n德克萨斯州图尔萨市,邮编74133”,
“余额”:“1937.2400”,
“公司名称”:“HUB Pharmaceuticals,LLC”,
“电子邮件”:[{
“电子邮件地址”:”lespinha4r@salon.com",
“emailname”:“Lizbeth Espinha”,
“记录ID”:“ea18a1b3-860d-45ed-a6bc-b5208dcfbac7”
}],
“记录ID”:“fe435915-0e5c-4165-80ca-28c69a5d1ed8”,
“出租车”:“132798707”,
“电话”:[{
“电话名”:“办公室”,
“电话号码”:“9185499797”,
“录音机”:1,
“记录ID”:“9fd70f31-b450-465b-aec4-39f47ec6e883”
}],
“weburl”:https://delicious.com"
}
常量状态={
记录ID:“”,
公司名称:{val:,err:},
地址:{val:,错误:},
电话:{val:[],错误:},
电子邮件:{val:[],错误:},
taxid:{val:,err:},
weburl:{val:,err:},
加载:正确
}
常量结果=(d,状态)=>({
……国家,
…Object.entries(d).reduce((p[k,val])=>(p[k]=({
瓦尔,
错误:“”
}),p),{})
})
console.log(结果(数据、状态))
状态={
记录ID:“”,
公司名称:{val:,err:},
地址:{val:,错误:},
电话:{val:[],错误:},
电子邮件:{val:[],错误:},
taxid:{val:,err:},
weburl:{val:,err:},
加载:正确
}
常数响应={
“地址”:“9242克洛夫法院\n德克萨斯州图尔萨市,邮编74133”,
“余额”:“1937.2400”,
“公司名称”:“HUB Pharmaceuticals,LLC”,
“电子邮件”:[
{
“电子邮件地址”:”lespinha4r@salon.com",
“emailname”:“Lizbeth Espinha”,
“记录ID”:“ea18a1b3-860d-45ed-a6bc-b5208dcfbac7”
}
],
“记录ID”:“fe435915-0e5c-4165-80ca-28c69a5d1ed8”,
“出租车”:“132798707”,
“电话”:[
{
“电话名”:“办公室”,
“电话号码”:“9185499797”,
“录音机”:1,
“记录ID”:“9fd70f31-b450-465b-aec4-39f47ec6e883”
}
],
“weburl”:https://delicious.com"
}
for(让对象的键。键(状态)){
if(类型(响应[键]!=“未定义”){
if(类型(状态[键]=“对象”){
状态[key].val=响应[key];
}否则{
状态[键]=响应[键];
}
}
}
console.log(state)
不确定为什么需要映射到val
和err
,但是使用reduce
和spread操作符应该可以工作。你想要下面这样的吗?如果可以的话,我可以创建一个答案,并在code.AWolf中添加一些细节。当我可以直接将值分配给状态时,这似乎是一项非常艰巨的工作。我希望有一个捷径可以做到这一点。我不想让你经历这些麻烦。谢谢您的帮助。@Elcid_91,如果您希望结果与提供的示例相匹配,AWolf的代码片段将尽可能简洁。凯文……完全理解,这是问题的解决方案;但是,没有足够的字段来保证编写额外的代码。阿沃尔夫,如果你想创造一个答案,我会勾选我的问题作为答案。