Javascript 需要知道如何对对象使用“扩展”操作符

Javascript 需要知道如何对对象使用“扩展”操作符,javascript,reactjs,Javascript,Reactjs,我有一个reactJS应用程序,想知道是否有更简单的方法将我的状态对象分配给rest返回的数据。也许使用扩展运算符 state = { recordid: "", companyname: {val:"",err:""}, address: {val:"",err:""}, telephone: {val:[],err:""}, email: {val:[],err:""}, taxid: {val:

我有一个reactJS应用程序,想知道是否有更简单的方法将我的状态对象分配给rest返回的数据。也许使用扩展运算符

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的代码片段将尽可能简洁。凯文……完全理解,这是问题的解决方案;但是,没有足够的字段来保证编写额外的代码。阿沃尔夫,如果你想创造一个答案,我会勾选我的问题作为答案。