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でのコーディングの完全な初心者です。おそらく何らかの構文エラーがあります。構文だけでアルゴリズムの助けは本当に必要ありません。
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) を割り当ててから、新しい変数を減算しました。