我有一个JavaScript对象,其中包含绘制了哪些轴数据。我需要用它来确定它是2D图(有X / Y,Y / Z或X / Z的数据)还是3D图(X / Y / Z上有数据)。
以下代码有效,我相信涵盖所有这些情况。但它非常难以理解和复杂。有没有办法改进这一点,使其更具可读性和/或简单性?
提前感谢您提供任何帮助。
var axes = {
"X": "Column 1",
"Y": "Column 2",
"Z": "Column 3"
}
if (typeof axes.X == 'undefined' && typeof axes.Y !== 'undefined' && typeof axes.Z !== 'undefined') {
alert("2D plot on Y and Z");
} else if (typeof axes.X !== 'undefined' && typeof axes.Y !== 'undefined' && typeof axes.Z == 'undefined') {
alert("2D plot on X and Y");
} else if (typeof axes.X !== 'undefined' && typeof axes.Y == 'undefined' && typeof axes.Z !== 'undefined') {
alert("2D plot on X and Z");
} else if (typeof axes.X !== 'undefined' && typeof axes.Y !== 'undefined' && typeof axes.Z !== 'undefined') {
alert("3D plot");
}
答案 0 :(得分:3)
你可以使用循环
var axes = {
"X": "Column 1",
"Y": "Column 2",
"Z": "Column 3"
}
var axesChecked = [];
for (var prop in axes) {
if(axes.hasOwnProperty(prop) && typeof axes[prop] !== 'undefined'){
axesChecked.push(prop);
}
}
switch(axesChecked.length) {
case 3:
alert("3D plot");
break;
case 2:
alert("2D plot " + axesChecked.join(' and '));
break;
default:
throw "Need more axes";
break;
}
答案 1 :(得分:2)
查看您的代码,看起来只是使用truthy/falsey值可以用来简化语句并使其保持清晰。
var axes = {
"X": "Column 1",
"Y": "Column 2",
"Z": "Column 3"
};
if (!axes.X && axes.Y && axes.Z) {
alert("2D plot on Y and Z");
} else if (axes.X && axes.Y && !axes.Z) {
alert("2D plot on X and Y");
} else if (axes.X && !axes.Y && axes.Z) {
alert("2D plot on X and Z");
} else if (axes.X && axes.Y && axes.Z ) {
alert("3D plot");
}