不声明变量的javascript解构
在上面的场景中,我如何将不声明变量的javascript解构,javascript,Javascript,在上面的场景中,我如何将squadName,homitory,formed,secretBase,active放入具有相同名称的变量中,而不必硬编码const{squadName,homitory,formed,secretBase,active}=data零件 是否可以使用json数据中的键动态创建const{squadName,homitory,formed,secretBase,active}部分,并像const{squadName,homitory,formed,secretBase,a
squadName,homitory,formed,secretBase,active
放入具有相同名称的变量中,而不必硬编码const{squadName,homitory,formed,secretBase,active}=data代码>零件
是否可以使用json数据中的键动态创建const{squadName,homitory,formed,secretBase,active}
部分,并像const{squadName,homitory,formed,secretBase,active}=data那样使用它
您可以采用如下的黑客方法:
json='{“squadName”:“超级英雄队”,“家乡”:“大都会”,“成立”:2016年,“秘密基地”:“超级塔”,“活跃”:真实,“成员”:[{“姓名”:“分子人”,“年龄”:29岁,“秘密性”:“丹·朱克斯”,“力量”:[“抗辐射”,“变小”,“辐射爆炸]}];
data=JSON.parse(JSON);
for(让对象的[key,value]项(数据)){
评估(键+“=值”)
}
log(squadName、homely、formed、secretBase、active)
您可以在解析后立即访问这些变量
json = '{"squadName":"Super hero squad","homeTown":"Metro City","formed":2016,"secretBase":"Super tower","active":true,"members":[{"name":"Molecule Man","age":29,"secretIdentity":"Dan Jukes","powers":["Radiation resistance","Turning tiny","Radiation blast"]}]}';
data = JSON.parse(json);
console.log(data);
const {squadName, homeTown, formed, secretBase, active} = data;
console.log(squadName, homeTown, formed, secretBase, active)
我不确定您的用例是什么,但是如果您只需要全局性地使用这些变量,您可以从窗口
对象中设置它们(参见本文:)
您可以做的是遍历数据并创建变量:
let json = '{"squadName":"Super hero squad","homeTown":"Metro City","formed":2016,"secretBase":"Super tower","active":true,"members":[{"name":"Molecule Man","age":29,"secretIdentity":"Dan Jukes","powers":["Radiation resistance","Turning tiny","Radiation blast"]}]}';
let data = JSON.parse(json);
console.log(data.squadName);
console.log(data.homeTown);
console.log(data.formed);
console.log(data.secretBase);
console.log(data.active);
这将为JSON中的每个条目创建变量。快速答案是否。当你事先知道你在寻找什么时,你会特别使用const。但实际上,你可以实现你想要做的
当您有一大堆要以编程方式处理的项目时,像数组和JavaScript对象这样的数据结构更有意义,但这最适合于您事先不知道将遇到什么的情况
如果您事先知道要使用这些字段,那么您已经拥有了所需的内容:
json = '{"squadName":"Super hero squad","homeTown":"Metro City","formed":2016,"secretBase":"Super tower","active":true,"members":[{"name":"Molecule Man","age":29,"secretIdentity":"Dan Jukes","powers":["Radiation resistance","Turning tiny","Radiation blast"]}]}';
data = JSON.parse(json);
Object.entries(data).forEach((item) => {
window[item[0]] = item[1]
})
如果您事先不知道,那么以编程方式选择元素并将其放入新对象或数组中是有意义的。例如,如果要创建仅包含字符串值的新对象,则:
const {squadName, homeTown, formed, secretBase, active} = data;
这将返回这个对象:
const justStrings = Object.keys(data)
.filter((k) => typeof data[k] === 'string')
.reduce((newObj, k) => {
newObj[k] = data[k];
return newObj;
}, {});
您可以使用全局属性动态分配json数据属性键值,而无需在解构中硬编码const{squadName,homightry,formed,secretBase,active}=data
json='{“squadName”:“超级英雄队”,“家乡”:“大都会”,“成立”:2016年,“秘密基地”:“超级塔”,“活跃”:真实,“成员”:[{“姓名”:“分子人”,“年龄”:29岁,“秘密性”:“丹·朱克斯”,“力量”:[“抗辐射”,“变小”,“辐射爆炸]}];
data=JSON.parse(JSON);
控制台日志(数据);
Object.entries(data.forEach(([key,val])=>globalThis[key]=val);
console.log(squadName、homerium、formed、secretBase、active)
是否将它们存储到一个数组中?@user9879287当然……这解决了问题,但不建议使用eval
:!
{
squadName: 'Super hero squad',
homeTown: 'Metro City',
secretBase: 'Super tower'
}