Почему мой цикл jquery дает неправильное сравнение значений из двух массивов? - PullRequest
0 голосов
/ 15 декабря 2018

У меня есть два массива ...

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 < 150, 0 < 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);
}

Любая помощь по этому поводу?Спасибо.

1 Ответ

0 голосов
/ 15 декабря 2018

Вам нужно преобразовать строковое представление чисел в ваших массивах в целые числа / числа, чтобы ваши неравенства работали правильно.Как:

"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 is true )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...