Использование jQuery $ .inArray - PullRequest
2 голосов
/ 17 января 2020

Мне нужно сравнить динамически создаваемую переменную с массивом значений c. Поскольку переменная генерируется динамически, я не могу сделать что-то вроде

if ($.inArray('example', myArray) != -1)
{
  // found it
}

Пока у меня есть это

 //This runs for each link in the .lc_Cell element
  $('.lc_Cell > p > a').attr('href', function(i, href) {

        //Grab the link and split it into chunks at each occurence of '&'
        var arr = href.split('&');
        console.log(arr);

        //Keep a portion of the link as a var, this is always a 4 digit number
        //For the purposes of this question lets say this value is going to be 7473 
        var trId = arr[1].slice(-4); 
        console.log(trId);

        //Populating my array of desired numbers to search against
        var validTR = [7473, 7474, 7475, 7476, 7477, 7478, 7479, 7480, 7481, 7482, 7483, 7484, 7485, 7486, 7487, 7488, 7489, 7490, 7491, 7492, 7493, 7494, 7495, 7351]; 
        console.log(validTR);       


        //Compare the sliced value from the link against the array
        var testingID = $.inArray(trId, validTR)
        console.log(testingID);
}

Мой testingID в консоли постоянно возвращает -1, даже если значение в trId содержится в массиве.

В конечном счете, мне нужно иметь возможность получить положительное значение для testingID, чтобы я мог написать оператор if, чтобы потом что-то делать.

Ответы [ 2 ]

2 голосов
/ 17 января 2020

Согласно документам :

Сравнение значений строго.

Ваше значение trId является строкой, массивом значения являются числами. Это связано с тем, что jQuery.attr() возвращает строку (за исключением особых случаев).

Попробуйте заключить значения вашего массива в кавычки, чтобы сделать их строками или привести все к строкам или числам:

trId = parseInt(trId, 10);

или

var validTR = ["7473", "7474", ...

Скрипка, демонстрирующая проблему, может быть найдена здесь

0 голосов
/ 17 января 2020
  • Массив validTR содержит только цифры.
  • Возвращаемое значение slice() будет строкой.

Строковое представление числа не является то же самое, что и число, поэтому оно не будет найдено при поиске в массиве.

const array = [1,2,3];
const number = 2;
const string = "2";

console.log("A", $.inArray(string, array));
console.log("B", $.inArray(number, array));
console.log("C", $.inArray(+string, array));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

Либо заполните массив строками, либо преобразуйте строку в число.

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