2017-09-08 20 views
2

安定したソート要素をデフォルトの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の制限)と互換性がないものを使用していたので、少し変更する必要がありました。私はこれで他の何かを逃したかどうかは分かりません。

何が起こっているかに関するアイデアはありますか?

+1

実際のデータを提供して障害を引き起こすことはできますか? – Dekel

+2

ie11は 'let'のようにES6をサポートしていません。 –

+0

@NinaScholzありがとう!私は 'let'を' var'に置き換えると修正したと思います。かなり厄介なのは、前にこれをやってしまったのですが、失敗しました。それは、私が削除した別のES6の使用があったからです。しかし、何らかの理由で、私は 'let 'を元に戻しました。これを答えとして追加することができます! – KickingLettuce

答えて

3

Microsoft IE11は、letステートメントのように、ES6をサポートしていません。

varステートメントで置き換えることができます。

Array.prototype.stableSort = function (cmp) { 
    cmp = cmp ||function (a, b) { 
     if (a < b) return -1; 
     if (a > b) return 1; 
     return 0; 
    }; 

    var stabilizedThis = this.map(function (el, index) { return [el, index]; }); 

    stabilizedThis.sort(function (a, b) { 
     return cmp(a[0], b[0]) || a[1] - b[1]; 
    }); 

    for (var i = 0; i < this.length; i++) { 
     this[i] = stabilizedThis[i][0]; 
    } 
    return this; 
}