Массив цифры в виде строки в простую задачу преобразования int - PullRequest
1 голос
/ 29 августа 2011

Консольная отладка показывает мне, что массив является ex. ["2"], но мне нужно [2].

Почему кастинг не работает?

function filterElements(deals) {

    var result = deals,
        categories= $('#deals-categories').data('current_category');
        if (categories != undefined && categories.length > 0) {
            for (var i; i < categories.length; i++) {
                categories[i] = parseInt(categories[i]);
            }
            console.log(categories, 'cats');
                result = $.grep(result, function(e) {
                    return $.inArray(e.category_id, categories) != -1;
     });                
        }
    return result;
}

Ответы [ 3 ]

4 голосов
/ 29 августа 2011

Вам нужно инициализировать var i = 0 в объявлении цикла.

Полная очистка кода:

function filterElements(deals) {

    var result = deals,
        categories = $('#deals-categories').data('current_category');

        if (categories && categories.length) {
            for (var i=0; i<categories.length; i++) {
                categories[i] = parseInt(categories[i], 10);
            }
            console.log(categories, 'cats');
            result = $.grep(result, function(e) {
                return $.inArray(e.category_id, categories) !== -1;
            });                
        }

    return result;
}
0 голосов
/ 29 августа 2011

Ты уверен? Вот пример, похожий на ваш:

var strings = ["1", "2", "3"];
var valueAsInt = 0;

for(var i = 0; i < strings.length; i++){
   valueAsInt = parseInt(strings[i]);
   if(typeof(valueAsInt) == 'number'){
      alert('Is an integer');
   }
}

Сообщение «Является целым числом» отображается три раза. Я думаю, что в вашем коде парсер работает, но, возможно, позже значение преобразуется в строку путем сравнения с другой строкой или, может быть, с некоторой конкатенацией.

0 голосов
/ 29 августа 2011

используйте categories[i] * 1 для сотворения

parseInt иногда работает немного неожиданно:)

parseInt("010") вернет 8 в некоторых браузерах и 10 в других: http://www.w3schools.com/jsref/jsref_parseInt.asp

...