1

jqueryを使用してアルファベットと数字を含む2つの配列を比較しようとしていますが、関数を呼び出しても何もしません。

    jQuery.compare = function (string2,string1) {
        alert("comparing")
        var i, j;
        for ( i = 0, j=0; i < string2.length|| j<string1.length; ++i,++j) {

            var n1 = 0,n2=0;
                if ($.isNumeric(string2[i+1])) {
                    num=string2[i]
                    while ($.isNumeric(string2[i+1])) {
                        i++;
                        num += string2[i]

                    }
                    n1 = 1;
                }
                if ($.isNumeric(strin1[j])) {
                    num1 = string1[j]
                    while ($.isNumeric(string1[j+1])) {
                        j++;
                        num1 += string1[j]
                    }
                    n2 = 1;
                }


                if (n1 == 1) {
                    if (n2 = 1) {
                        if( parseInt(num1) - parseInt(num) !=0)
                            return parseInt(num1) - parseInt(num);
                    }
                    else
                        return 1;
                }
                else if (n2 = 1)
                    return -1;
                else {
                    if(string2[i]-string1[j]!=0)
                       return string2[i]-string1[j]!=0;

                }
        }
        if (j < string1.length)
            return -1;
        else
            return 1;

    }

また、この関数を呼び出す最良の方法を知りたいです。string1.compare(string2) のようなものを使用し、上記のコード フラグメントで string1 を 'this' に置き換えたいと思います。

編集:これは、比較関数を呼び出す方法です。ここで、colValues は文字列の配列です。

    $.fn.sort = function (colValues) {
        alert("sorting")
        var i;
        for (i = 0; i < colValues.length; ++i) {
            for (var j = 0; j < i - 1; ++j) {
                alert("before compare")

                if(colValues.compare(colValues[j],colValues[j + 1])) {
                    var temp = colValues[j];
                    colValues[j] = colValues[j + 1];
                    colValues[j + 1] = temp;
                }
            }
        }
        return colValues
    }

私が交換する場合

    if(colValues.compare(colValues[j],colValues[j + 1]))

    if(colValues[j]>colValues[j+1])

私のソート機能は動作します。

私はjqueryでのコーディングの完全な初心者です。おそらく何らかの構文エラーがあります。構文だけでアルゴリズムの助けは本当に必要ありません。

ここで私のコードをjsfiddle-checkout

EDIT2:すべてをメタディングに修正しました。これが私が変更しなければならなかったものです

1)

    jQuery.compare

    $.fn.compare

2)

    if($.isNumeric(string2[i+1]))

    if(jQuery.isNumeric(string2[i + 1]))

どういうわけか

     while ($.isNumeric(string1[j+1]))

構文は変更なしで機能しました

3)

parseInt(num1) - parseInt(num)

NaNを返すため、どちらも機能しませんでした。この問題を解決するために、2 つの var 変数 'number1' と 'number2' を定義し、それらを 0 で初期化し、変数に個別に parseInt(num1) を割り当ててから、新しい変数を減算しました。

4

0 に答える 0