[英]Javascript - dont compare if condition met
我有這個腳本用於我的html表格,它逐行着色列中的單元格:
$(document).ready( function () {
var table, aP, rtvP, mmP, meP;
table = document.getElementById('productTable');
for (i = 1; i < table.rows.length; i++) {
var rowCells = table.rows.item(i).cells;
if (rowCells[3].firstChild.data !== '—') {
aP = parseFloat(rowCells[3].firstChild.data);
} else {
aP = 0;
}
if (rowCells[5].firstChild.data !== '—') {
rtvP = parseFloat(rowCells[5].firstChild.data);
} else {
rtvP = 0;
}
if (rowCells[7].firstChild.data !== '—') {
mmP = parseFloat(rowCells[7].firstChild.data);
} else {
mmP = 0;
}
if (rowCells[9].firstChild.data !== '—') {
meP = parseFloat(rowCells[9].firstChild.data);
} else {
meP = 0;
}
console.log(aP, rtvP, mmP, meP);
if (aP > rtvP || mmP || meP) {
rowCells[3].bgColor = 'red';
} else if (aP === rtvP || mmP || meP) {
rowCells[3].bgColor = 'yellow';
} else {
rowCells[3].bgColor = 'green';
}
}
})
我知道這是一個小怪物,但我唯一想念的是,如果該值= 0,則不應該對值進行比較。 如果aP = 100,rtvP = 150,mmP = 0,meP = 50,則應跳過mmP的值進行比較。 有沒有簡單的方法呢? 我不想再制作IF的意大利面
您可以嘗試將其中一個實例轉換為適當的函數:
function convertP(value) {
if (value !== '—') {
return parseFloat(value);
}
return 0;
}
然后你可以這樣稱呼它:
meP = convertP(rowCells[9].firstChild.data);
在哪里可以將convertP
函數擴展為“更智能”並在以后處理不同的情況。
現在,對於您的比較問題,您可能希望將這些轉換后的值存儲到數組中,而不是存儲為一堆不相關的變量,例如:
var points = [ ];
[ 3, 5, 7, 9 ].forEach(function(i) {
points.push(convertP(rowCells[i].firstChild.data));
});
現在你把所有這些都放在一個整潔,整潔的容器里。 然后,您可以通過以下操作快速比較它們:
var diffs = [ ];
points.forEach(function(p) {
diffs.push(aP - p);
});
這里要記住的關鍵是浮點值通常是近似值,因此重要的是不要依賴它們精確相等。 1.0 + 2.0不一定===
3.0。 由於浮點怪癖會出現微小的偏差,所以即使該值為0.000001,也要使用+/-一些微小的值。
現在,您可以使用以下功能識別顏色條件:
function colorCondition(aP, points) {
var state = 'green';
var epsilon = 0.000001;
points.forEach(function(p) {
if (aP > (p + epsilon)) {
state = 'red';
}
else if (aP > (p - epsilon)) {
state = 'yellow';
}
});
return state;
}
現在您有了一個可以使用N個輸入的通用解決方案。 當您嘗試遵守Zero,One或Infinity規則時,這是編程的目標。
將先決條件置於if的方法之一是使用邏輯AND運算符: &&
。
對於你的變量,它將是這樣的:
if (mmP!=0 && mmP>aP){}
這樣,如果mmP為0,則第一個條件將返回false,並且不會處理第二個條件。
你可以強制執行一個條件,而不會制作另一個IF意大利面。
我不確定我是否了解您的用例,所以如果這對您不起作用,請對其進行評論。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.