Javascript 数组值中的对象名称
我有一个包含一些值的数组:Javascript 数组值中的对象名称,javascript,arrays,object,javascript-objects,Javascript,Arrays,Object,Javascript Objects,我有一个包含一些值的数组: let typeArray = ["name", "strret", "car", "type"]; 我有一个目标: let formDefinitionObject = {schema:{}} 我希望formDefinitionObject对象类似于: let formDefinitionObject = { schema: { name: { type: 'string', title: 'Name', requ
let typeArray = ["name", "strret", "car", "type"];
我有一个目标:
let formDefinitionObject = {schema:{}}
我希望formDefinitionObject对象类似于:
let formDefinitionObject = {
schema: {
name: {
type: 'string',
title: 'Name',
required: true
},
strret: {
type: 'string',
title: 'Strret'
},
car: {
type: 'string',
title: 'Car'
},
type: {
type: 'string',
title: 'Type'
}
}
}
我希望数组中的每个项都是formDefinitionObject.schema对象中的对象。例如,如果我在数组typeArray中再添加一个项目。按“country”可在formDefinitionObject.schema对象中自动添加此对象。您可以在带有设置陷阱的typeArray上使用代理,因此每次将新值推送到代理数组时,您也可以向架构添加新属性。这样可以模拟观察者模式
您还可以创建一些模式来添加其他属性,如required,例如name:prop1:prop2,但通过这种方式,值固定为true
let typeArray=[名称:必选,stret,car,type];
让formDefinitionObject={
架构:{}
}
设proxyArray=新的ProxytypeArray{
setobj、prop、value{
如果prop!=“length”addToSchemaformDefinitionObject.schema,则为值;
返回Reflect.set…参数;
}
}
函数大写字符串{
返回string.charAt0.toUpperCase+string.slice1;
}
函数addToSchemaschema,prop{
常量[名称,…参数]=属性拆分“:”;
架构[名称]={
键入:“字符串”,
标题:大写名称
}
params.forEachparam=>schema[name][param]=true;
返回模式;
}
proxyArray.ReducedToSchema,formDefinitionObject.schema;
proxyArray.push'email:required:isEmail';
proxyArray.push'phone';
console.logformDefinitionObject尽管您没有进一步说明字段是如何必需的,或者任何字段是否必须作为字符串,但这里有一个基于您目前提供的解决方案 下一个代码段完成了这项工作,它有一些解释: 让typeArray=['name','strret','car','type'], formDefinitionObject={ 架构:{} }; /**在typeArray中循环并填充formDefinitionObject.schema**/ typeArray.forEachel=>{ 设currObj={ 类型:'string',/**您没有说明如何确定类型**/ 标题:el[0]。toUpperCase+el.substring1,/**第一个字母大写的标题,如您在问题中提供的。您可以使用el而不是el[0]。如果要按原样打印,请使用toUpperCase+el.substring1**/ }; el=='name'&&currObj['required']=true;/**您没有说明如何确定字段是否必须是必需的。我只是根据需要查看了名称,所以我做了一个基本但愚蠢的检查,如果当前元素是name,则向其添加必需的名称**/ formDefinitionObject.schema[el]=currObj;/**将当前记录添加到schema属性**/ }; console.dirformDefinitionObject;/**打印结果**/无法理解如何要求:true适合。剩下的事情可以做如下 var getFormDefinition=functionarr{ 函数getSchemaobjar{ 返回arr.mapd=>{ [d] :{ 类型:typeofd, 标题:d } } .reducea,b=>{…a,…b} } var schemaObj=getschemaobjar arr.push=功能…d{ Object.assignschemaObj,getSchemaObjd 返回Array.prototype.push.callarr,…d } 返回{ 模式:schemaObj } } var typeArray=[name,stret,car,type]; var result=getFormDefinitiontypeArray console.logresult typeArray.push'nitish'
console.logresultWelcome到堆栈溢出!请拿着你的徽章!通读全文,尤其是你在这里的最佳选择是做你的研究,对于相关的话题,等等,然后试一试。如果你在做了更多的研究和搜索后陷入困境,无法摆脱困境,请发布一份你的尝试报告,具体说明你陷入困境的地方,以及逻辑告诉你名字应该是什么:正确,但其他人都不应该。人们会很乐意帮忙的。你试过使用for循环吗?您如何决定哪些项目应该是必需的?但是您如何决定字段必须是必需的?是否每个字段的类型都必须是字符串?