2012年9月6日 星期四

javascript 副程式分享 rangeText 與 array 互轉

首先要定義 rangeText 是什麼, 例如:
1,2,8-10

首先透過 副程式1號, 把 rangeText 放到 array 裡:
rangeText_to_array(list_string)
function rangeText_to_array(list_string){
    var return_array = new Array();
    if(list_string!="")
    {
        var listDataArray= new Array();
        listDataArray=list_string.split(",");
        for (var iPos=0; iPos<listDataArray.length; iPos++ )
        {
            var currentItem;
            currentItem=trim(listDataArray[iPos]);
            if(currentItem.indexOf("-")==-1){
                return_array.push(currentItem);
            }
            else
            {
                // range
                var range_begin=trim(leftField(currentItem,"-"));
                var range_end=trim(rightField(currentItem,"-"));
                for(var rangeIndex=parseInt(range_begin,10); rangeIndex<=parseInt(range_end,10); rangeIndex++)
                {
                    return_array.push(rangeIndex);
                }
            }
        }
    }
    return_array.sort();
    return return_array;
}


如果, 要把 array 裡的值轉成 rangeText:
function array_to_rangeText(E) {
    var val = "";
    if (E.length) {
        var last_value='';
        var is_queue_status=false;
        for (var iPos = 0; iPos < E.length; iPos++) {
            var my_value=E[iPos];
            if(last_value!="" && my_value!=""){
                if(isNextNumber(last_value,my_value)){
                    is_queue_status=true;
                }
                else
                {
                    if(is_queue_status){
                        if(val != "") val += "-";
                        val += last_value;
                    }
                    is_queue_status=false;
                }
            }
            if(!is_queue_status){
                if(val != "") val += ",";
                val += E[iPos];
            }
            // 記住上一個號碼.
            last_value = E[iPos];
        }
        if(is_queue_status){
            if(val != "") val += "-";
            val += last_value;
        }
    }
    return val;
}

// 判斷號碼是否連續.
function isNextNumber(num1, num2){
    var returnValue = false;
    if(isNumeric(num1) && isNumeric(num2)){
        if(parseInt(num2,10)-parseInt(num1,10)==1){
            returnValue = true;
        }
    }
    return returnValue;
}

//檢查是否為數字
function isNumeric(num) {
    if(isNaN(num)){
        return false;
    }
    return true;
}

為什麼要這樣子轉來轉去? 因為要把使用者看的數字(ex: 8-12) 做部份的刪除, 刪完後, 再要種新格式化成 rangeText 給使者用看.

還會需要用到2個 array function:
1. find item in array
function arrayFind(originalArray, itemToDetect) {
    var j = 0;
    while (j < originalArray.length) {
        if (originalArray[j] == itemToDetect) {
            return true;
        } else { j++; }
    }
    return false;
}

2. remove item (string or number) from an array
function arrayRemove(originalArray, itemToRemove) {
    var j = 0;
    while (j < originalArray.length) {
        if (originalArray[j] == itemToRemove) {
            originalArray.splice(j, 1);
            // remove first.
            break;
        } else { j++; }
    }
}
說明: 這裡會有, value 在 array 會不會重覆的問題, 假設不會重覆的情況下, 就只需要 remove first 即可.

array 的 append, 用 array.push 就完成了.

array 相減, 左邊是全部item, 右邊是要刪掉的item.
function array_remove_from_array(array_all, array_find){
    if(array_find.length>0){
        for(var iDataFind=0; iDataFind<array_find.length; iDataFind++){
            arrayRemove(array_all, array_find[iDataFind]);
        }
    }
}



沒有留言:

張貼留言

Facebook 留言板