js如何简化判断x,y,z分别为正负的八种可能
例如:
if (x > 0 && y > 0 && z > 0) {
console.log("(+,+,+)");
} else if (x > 0 && y > 0 && z < 0) {
console.log("(+,+,-)");
} else if (x > 0 && y < 0 && z > 0) {
console.log("(+,-,+)");
} else if (x > 0 && y < 0 && z < 0) {
console.log("(+,-,-)");
} else if (x < 0 && y > 0 && z > 0) {
console.log("(-,+,+)");
} else if (x < 0 && y > 0 && z < 0) {
console.log("(-,+,-)");
} else if (x < 0 && y < 0 && z > 0) {
console.log("(-,-,+)");
} else if (x < 0 && y < 0 && z < 0) {
console.log("(-,-,-)");
}
除了这种写法还有比较简洁的写法吗
利用三元运算符
const result = ${x > 0 ? '+' : '-'}${y > 0 ? '+' : '-'}${z > 0 ? '+' : '-'}
;
console.log((${result})
);
该回答引用chatgpt:
const result = (x > 0 ? '+' : '-') + (y > 0 ? '+' : '-') + (z > 0 ? '+' : '-');
console.log(result);
问题答案由GPT-4Plus模型(语音)与博主程序员之梦@共同编写:
对于判断x,y,z三个变量的正负共8种情况,JS中有更简洁的写法。
可以使用一个对象来映射不同情况下的输出:
js
const posNeg = {
'(+,+,+)': x > 0 && y > 0 && z > 0,
'(+,+,-)': x > 0 && y > 0 && z < 0,
'(+,-,+)': x > 0 && y < 0 && z > 0,
'(+,-,-)': x > 0 && y < 0 && z < 0,
'(-,+,+)': x < 0 && y > 0 && z > 0,
'(-,+,-)': x < 0 && y > 0 && z < 0,
'(-,-,+)': x < 0 && y < 0 && z > 0,
'(-,-,-)': x < 0 && y < 0 && z < 0
};
for (const key in posNeg) {
if (posNeg[key]) {
console.log(key);
break;
}
}
这里通过一个对象posNeg映射了8种情况及其判断逻辑。然后通过for..in遍历这个对象,一旦找到对应情况,输出key并break结束循环。
这样可以避免写多个else if判断逻辑,代码更加简洁。
另外,也可以利用数组来映射这8种情况:
js
const posNeg = [
[x > 0, y > 0, z > 0],
[x > 0, y > 0, z < 0],
[x > 0, y < 0, z > 0],
[x > 0, y < 0, z < 0],
[x < 0, y > 0, z > 0],
[x < 0, y > 0, z < 0],
[x < 0, y < 0, z > 0],
[x < 0, y < 0, z < 0]
];
for (let i = 0; i < posNeg.length; i++) {
if (posNeg[i][0] && posNeg[i][1] && posNeg[i][2]) {
console.log(`(x${posNeg[i][0]},y${posNeg[i][1]},z${posNeg[i][2]})`);
break;
}
}
这种方式通过一个二维数组 posNeg 映射了8种情况,然后遍历这个数组判断对应的三个值是否同为正或同为负,从而输出对应情况。
const signs = ['-', '+'];
const result = `${signs[+(x >= 0)]},${signs[+(y >= 0)]},${signs[+(z >= 0)]}`;
console.log(`(${result})`);
这里定义了一个数组 signs,用于存储符号。然后使用 + 运算符将布尔值转换为数值,即 +(x >= 0) 将 x >= 0 的布尔值转换为 0 或 1。再使用 [] 运算符从 signs 数组中取出相应的符号。最后使用字符串模板拼接成结果,并打印到控制台中。这样可以将八种可能简化为一行代码。