jQuery.uniqueは血液事件を引き起こした

9430 ワード

プロジェクト開発の過程で、PMはシステムが1つの特定のブラウザの中で運行すればいいと言ったが、他のブラウザでは論理的なエラーが発生できないので、開発の過程で、フロントエンドとバックグラウンドの選択はChromeブラウザで、FirefoxとIEをよくテストしなかった.しかし、昨日PMはブラウザ互換性のバグを反映し、Chromeブラウザの下で正常に動作していましたが、IEブラウザではエラーは報告されませんでしたが、論理は間違っていました.複雑なビジネスロジックを排除し、コードを以下のように簡略化します.
<html>
    <head>
        <meta charset="utf-8"/>
        
        <script type="text/javascript" src="jquery-1.10.2.min.js"></script>
        <script type="text/javascript" src="underscore.js"></script>
    </head>
    <body>
        <input type="hidden" value="" id="tempids"/>
        <input type="text" value="" id="tempvalue"/>
        <script type="text/javascript">
        var arr1=$("#tempids").val().split(","); var arr2=[4,5,6]; $("#tempvalue").val($.unique($.merge(arr1,arr2)).join(",")); var selectedFilterIds = $("#tempvalue").val(); if (selectedFilterIds.split(",")[0] == "") { alert("      !"); } else{ alert("   !"); } </script>
    </body>
</html>

 
プログラムの目的は,arr 2をarr 1に統合し,配列を再操作することである.エラーは再操作でjQueryを使用していますunique().jQuery.Unique()メソッドはChromeとIEブラウザで出力される結果が異なります.次の例を示します.
var temp=$.unique([1,2,3,3,2,1,4]); for(var j=0;j<temp.length;j++){ console.log(temp[j]); }

 
Chromeで出力した結果は:4 3 2 1;しかしIEで出力された結果は2 3 2 1 4であった.結果が違う.参考サイトのstack overflowで説明があります.しかしunique()という方法を間違えました.
 
注:配列内の重複要素を削除します.DOM要素配列の削除のみを処理し、文字列や数値配列は処理できません.
 
文字列または数値配列を処理するには、UnderScoreを使用します.jsクラスライブラリ内のuniq()メソッド.コードは次のとおりです.
var temp=_.uniq([1,2,3,3,2,1,4]); for(var j=0;j<temp.length;j++){ console.log(temp[j]); }

 
出力結果はChromeもIEも同じです.1,2,3,4.
 
 
参考サイト:
jQuery.Unique()メソッド:http://www.css88.com/jqapi-1.9/jQuery.unique/
UnderScore.jsの中のuniq()の方法:http://www.css88.com/doc/underscore/#uniq
Stack Overflow: http://stackoverflow.com/questions/7366095/how-to-use-unique-function