作为字符串的数字数组到简单的int转换问题

时间:2011-08-29 13:07:30

标签: javascript string casting int

控制台调试向我显示该数组是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 个答案:

答案 0 :(得分:4)

您需要在循环声明中初始化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;
}

答案 1 :(得分:0)

使用categories[i] * 1投射

parseInt有时会以一种意想不到的方式运作:)

parseInt("010")将在某些浏览器中返回8,在其他浏览器中返回10:http://www.w3schools.com/jsref/jsref_parseInt.asp

答案 2 :(得分:0)

你确定吗?这是一个类似于你的例子:

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');
   }
}

消息'Is an integer'显示三次。我认为在你的代码中解析器可以正常工作,但也许以后,通过与其他字符串比较,或者可能是一些串联,将值转换为字符串。