基于select创建javascript对象
我的html中有一个带有多个值的基于select创建javascript对象,javascript,html,Javascript,Html,我的html中有一个带有多个值的标记。 我还有一个javascript中的构造函数。 我试图解决的问题是基于所选值创建js对象。现在我有一个if语句的解决方案,它使用基于select值的参数调用构造函数。当select中没有太多值时,它可以正常工作。但如果有很多价值观,这种方式似乎效率极低。没有if语句,有没有更有效的方法来实现这一点 这是一把小提琴: 一种解决方案是预填充HTML,您可以使用自定义属性填充选择选项,并在JS中选择它们,如下所示: 函数createHumanObj(e){ v
标记。
我还有一个javascript中的构造函数。
我试图解决的问题是基于所选值创建js对象。现在我有一个if语句的解决方案,它使用基于select值的参数调用构造函数。当select中没有太多值时,它可以正常工作。但如果有很多价值观,这种方式似乎效率极低。没有if语句,有没有更有效的方法来实现这一点
这是一把小提琴:
一种解决方案是预填充HTML,您可以使用自定义属性填充选择选项,并在JS中选择它们,如下所示:
函数createHumanObj(e){
var e=document.getElementById(“mySelect”),
已选=e.options[e.selectedIndex],
firstname=selected.value,
lastname=selected.getAttribute(“数据lastname”);
var currentHuman=新人类(名字,姓氏,28);
回归人性;
}
在需要从一系列离散值中选择一个值的情况下,我使用switch语句。对于您的示例,我会将其用于“createHumanObj”函数:
function createHumanObj(e){
var selectedHuman = e.options[e.selectedIndex].value;
switch(selectedHuman) {
case 'John':
return new Human('John', 'Dalton', 28)
case 'Tony':
return new Human('Anthony', 'Stark', 50)
default:
console.log('Unknown human')
}
}
与其在选择对象时创建对象,因为它们总是相同的(我想是吧?),为什么不将它们存储在“地图”中呢?像这样:
var exampleJson='{“约翰”:{“姓氏”:“约翰”,“名”:“道尔顿”,“年龄”:28},“托尼”:{“姓氏”:“安东尼”,“名”:“斯塔克”,“年龄”:50}”;
//例如,json可以来自Web服务
var humans=JSON.parse(exampleJson);
函数createHumanObj(){
var e=document.getElementById(“mySelect”);
var selectedHuman=e.options[e.selectedIndex].value;
返回人类[selectedHuman];
}
函数showHumanProps(){
var log=document.getElementById(“日志”);
var currentHuman=createHumanObj();
log.innerHTML=currentHuman.firstName+“”+currentHuman.lastName+“”+currentHuman.age;
}
var btn=document.getElementById(“btn”);
btn.addEventListener('click',showHumanProps);
厕所
托尼
显示人体道具
处理重复的名字或姓氏。
预创建人员并使用索引存储他们
var humans = {
0: new Human('John', 'Dalton', 28),
1: new Human('Anthony', 'Stark', 50),
//...
};
及
var human=humans[e.selectedIndex]代码>也可以尝试此方法-
函数人(userData){
this.lastName=userData.lastName;
this.firstName=userData.firstName;
this.age=userData.age;
}
函数createHumanObj(e){
var e=document.getElementById(“mySelect”);
var selctedHuman=e.options[e.selectedIndex].value;
风险值数据={
“约翰”:{
“名字”:“约翰”,
“姓氏”:“道尔顿”,
“年龄”:28岁
},
“托尼”:{
“名字”:“安东尼”,
“姓氏”:“斯塔克”,
“年龄”:50
}
};
返回新人员(数据[selctedHuman]);
}
(功能(){
var btn=document.getElementById(“btn”);
addEventListener('click',showHumanProps);
函数showHumanProps(){
var log=document.getElementById(“日志”);
var currentHuman=createHumanObj();
log.innerHTML=currentHuman.firstName+“”+currentHuman.lastName+“”+currentHuman.age;
}
})();代码>
选择,按钮,#日志{
显示:块;
利润率:10px自动;
字体大小:25px;
文本对齐:居中;
}
约翰
托尼
展示人体道具
你怎么知道john
姓Dalton
和年龄28
?其他人也一样。这并不比if…else
解决方案好多少。
var humans = {
0: new Human('John', 'Dalton', 28),
1: new Human('Anthony', 'Stark', 50),
//...
};