さて、私は本当に単純なものを見落としているというこっそりの疑いがありますが、次のコードに問題があります:
Array.prototype.sortArr = function (skey)
{
var vals = new Array();
for (key in this)
{
if (typeof(this[key][skey]) != 'undefined')
{
vals.push((this[key][skey]+'').toLowerCase());
}
}
vals.sort();
var newArr = new Array();
for (i=0;i<vals.length;i++)
{
for (key in this)
{
if (typeof(this[key][skey]) != 'undefined')
{
if ((this[key][skey]+'').toLowerCase() == vals[i])
{
newArr.push(this[key]);
break;
}
}
}
}
return newArr;
}
簡単に言うと、この関数は、マルチレベルオブジェクトを並べ替える点と、並べ替える必要のあるキーを指定する点を除いて、並べ替え関数に似ています。
問題は、「this」値を実際に置き換えたり変更したりしないことです。つまり、この関数は実際には何もしません。例えば:
var arr = new Array(new Array(1,5),new Array(2,0));
arr.sortArr(1);
通話arr
の前後から変更されることはありません。sortArr(1)
ただし、関数が戻る直前に右に置くと、alert(newArr)
実際に並べ替えられたことがわかります。だから、私の質問は; this
コールバック関数の値を置き換える、または少なくとも適切な/新しい配列を返すにはどうすればよいですか?前もって感謝します。