簡體   English   中英

Javascript - 如果條件滿足則不要比較

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM