javascript验证多维数组中多个范围内的值

时间:2011-06-21 23:54:13

标签: javascript multidimensional-array iteration range

我在验证脚本中遇到问题,检查澳大利亚邮政编码。 它似乎没有通过包含邮政编码值的多维数组递增。

这是功能:

function validateAustralia(postcode, ranges) {

           for (var i = 0; i < ranges.length; i++) {
                     console.log(i);
//returns only 0, when it should return 0, 1, 2.
                     console.log("postcode: " + postcode + " " + "ranges: " + ranges);
//returns postcode: 2000 ranges: 200,299,2600,2618,2900,2920
                     console.log("ranges - low: " + ranges[2][0] + " " + "ranges - high: " + ranges[2][1]);
                     //returns ranges - low: 2900 ranges - high: 2920
                if (postcode >= ranges[i][0] && (postcode <= ranges[i][1])) {
                     valid = true;
                     //confirmation();
                     //break;
                } else {
                     inelegible();
                     return false;
                }
           }
     }

例如新南威尔士州

ranges = [ [1000, 2599], [2619, 2898], [2921, 2999] ];

它只返回1000和2599 - 即范围[0] [0]和范围[0] [1] 因此,输入Dubbo(位于新南威尔士州)的邮政编码的人被裁定无效,因为其邮政编码 - 2830 - 不在1000和2599之间。

jQuery的$ .each()正确迭代第一个数组,但我不知道如何从第二级数组中获取值。

编辑: 好的,所以这是一个深夜,我是盲目的。 kojiro的答案大部分都在下面,而且这里的一位朋友也指出:我在第一次运行后终止了迭代。 我移动了,如果else循环迭代,只测试邮政编码是否在范围内。如果是,它是有效的。 然后,如果valid = true,我调用确认函数,其他一切都很好:

function validateAustralia(postcode, ranges) {
    for (var i = 0; i < ranges.length; i++) {
            console.log(i);
            // returns 0, 1, 2 ...
            console.log("postcode: " + postcode + " " + "ranges: " + ranges);
            // for Dubbo (2830), for example, returns postcode: 2830 ranges: 1000,2599,2619,2898,2921,2999
            console.log("ranges - low: " + ranges[i][0] + " " + "ranges - high: " + ranges[i][1]);
            // returns  ranges - low: 1000 ranges - high: 2599,
            //          ranges - low: 2619 ranges - high: 2898, ...


        if (postcode >= ranges[i][0] && (postcode <= ranges[i][1])) {
            valid = true;
        //  alert("valid =" + valid);
        } 
        if (valid === true) {
            confirmation();
            // all good
        } else {
            inelegible();
            // Sorry, mate
        }
    }
}

因为我是新来的,(长时间听众,第一次打电话)我无法回答我自己的问题,但基本上就是这样。

这是@nnnnnn的HTML和调用函数以及任何想要查看的人: 用户从选择

中选择状态
<select id="states" name="states">
     <option selected="" value="">Please choose ...</option>
        <optgroup label="Australia" id="australia">
        <option value="act">Australian Capital Territory </option>
        <option value="nsw">New South Wales </option>
      <!-- ...and so on for the rest of the states -->

并将其邮政编码输入文本框

<input id="postcode" name="postcode" type="text" maxlength="4" />

我得到了

postcode = $('#postcode').val();

并检查一系列邮政编码值

function checkAustralia(state, postcode, ranges) {  
    //      has to be in the range of values
        switch (state) {
            //Australian states
            //match the whole postcode
            //postcodes with a leading '0' are validated as whole numbers without the '0'
        case 'act':
            ranges = [ [200, 299], [2600, 2618], [2900, 2920] ];
            validateAustralia(postcode, ranges);
            break;
        case 'nsw':
            ranges = [ [1000, 2599], [2619, 2898], [2921, 2999] ];
            validateAustralia(postcode, ranges);
            break;
// ...and so on for the rest of the states

1 个答案:

答案 0 :(得分:1)

检查第一个范围后,您的函数将返回false。如果值范围内,则反转该逻辑:return true,但仅当循环完全耗尽时才返回false。

此外,您的代码并不总是显式返回值。这显然不是一个问题,但它可能与这里的混乱有关。