安定したソート要素をデフォルトのJavaScript .sort()関数に作成しようとしています。 IE11以降を除くすべてのブラウザで動作しています。ここでIE11でのJavaScriptの問題の安定したソートの作成
コードです:参考
Array.prototype.stableSort = function(cmp) {
cmp = !!cmp ? cmp : (function(a, b) {
if (a < b) return -1;
if (a > b) return 1;
return 0;
});
let stabilizedThis = this.map(function(el, index) { return [el, index]; });
stabilizedThis.sort(function(a, b) {
let order = cmp(a[0], b[0]);
if (order != 0) return order;
return a[1] - b[1];
});
for (let i=0; i<this.length; i++) {
this[i] = stabilizedThis[i][0];
}
return this;
}
、上記のコードは、私が実際に私のコードでは、この安定したソート機能を使用していない場合でも、失敗しました。
sortedArray.stableSort(function(a,b) {
if (type == "string") {
return a[index]["value"].toString().localeCompare(b[index]["value"].toString());
}
else if (type == "number") {
return a[index]["value"] - b[index]["value"];
}
});
注:私の使用量がこのようなものになり、問題を行って絞り込むには、私がいることを発見した - 最低でも、このコードはIE11で動作します。
Array.prototype.stableSort = function(cmp) {
cmp = !!cmp ? cmp : (function(a, b) {
if (a < b) return -1;
if (a > b) return 1;
return 0;
});
// everything here was removed for testing
return this;
}
もちろん、この行いますソートしない(または安定したソート)が、構文エラーは発生しません。
残念ながら、開発ツールとコンソールでは、失敗した行番号がわかりません。
参考までに、私はこのlinkで見つけたコードを引用しています。彼らはES5(IE11の制限)と互換性がないものを使用していたので、少し変更する必要がありました。私はこれで他の何かを逃したかどうかは分かりません。
何が起こっているかに関するアイデアはありますか?
実際のデータを提供して障害を引き起こすことはできますか? – Dekel
ie11は 'let'のようにES6をサポートしていません。 –
@NinaScholzありがとう!私は 'let'を' var'に置き換えると修正したと思います。かなり厄介なのは、前にこれをやってしまったのですが、失敗しました。それは、私が削除した別のES6の使用があったからです。しかし、何らかの理由で、私は 'let 'を元に戻しました。これを答えとして追加することができます! – KickingLettuce