我有两个数组...

var arr3 = [];
$('td:nth-child(2)').each(function() {
    arr3.push($(this).text());
});
//console.log(arr3);

var arr4 = [];
$('td:nth-child(6)').each(function() {
    arr4.push($(this).text());
});
//console.log(arr4);


这些收集了我想要的图表中的一些数据。我的目标是比较两个数组,以查看每个给定位置的arr3中的值是否大于或等于arr4中的值。

昨天一切似乎都正常,但是今晚我稍稍更改了数据,现在说的是事实,但事实并非如此。

arr3 = ["0", "0", "30"]
arr4 = ["150", "150", "140"]


所以0 < 1500 < 150应该是30 < 140,但是我的循环是30 >= 140

这是我的循环:

for (var i = 0; i < arr3.length; i++) {
    if (arr3[i] >= arr4[i]) {
        console.log(arr3[i] + " is >= " + arr4[i]);
        var bearned2 = $('.g2bonus')[i];
        $(bearned2).append(' ✔');
    } else {
        console.log(arr3[i] + " is < " + arr4[i]);
    }
}


我试图对此进行研究,并发现了闭包错误,但是我不太了解它,因此无法对我的情况进行适当的修复。我尝试了此循环,但它只报告第一个比较,而不报告其他两个:

for (var i = 0; i < arr3.length; arr3++) {
    (function(index) {
        if (arr3[i] >= arr4[i]) {
            console.log(arr3[i] + " is >= " + arr4[i]);
            var bearned2 = $('.g2bonus')[i];
            $(bearned2).append(' ✔');
        } else {
            console.log(arr3[i] + " is < " + arr4[i]);
        }
    })(i);
}


有什么帮助吗?谢谢。

最佳答案

您需要将数组中数字的字符串表示形式转换为整数/数字,以使不等式正确起作用。如:

"30" >= "140"是真的



30 >= 140为假。

为此,您只需在表示数字的字符串前添加+即可将其转换为数字(整数,浮点数等)。

请参见下面的工作示例:



var arr3 = ["0", "0", "30", "100"];
var arr4 = ["150", "150", "140", "0"];

for (var i = 0; i < arr3.length; i++) {
  if (+arr3[i] >= +arr4[i]) { // Add + infront of arr3[i] and arr4[i] to convert to numbers
    console.log(arr3[i] + " is >= " + arr4[i]);
    var bearned2 = $('.g2bonus')[i];
    $(bearned2).append(' ✔');
  } else {
    console.log(arr3[i] + " is < " + arr4[i]);
  }
}

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>





另外,我在末尾添加了另一个检查,以表明它不会为每个值输出false,并且您的检查正在工作(100 >= 0为true)

关于javascript - 为什么我的jquery循环会错误地比较两个数组的值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53791370/

10-12 21:52
查看更多