一、問題
在js中是不能直接用「==」或者「===」來計算兩個陣列是否相等的,那麼就需要對陣列的值進行比較;
二、次解決方案
對於比較兩個陣列次要的方法有如下幾種,為什麼說是次要解決方案呢?因為它不能真正稱之為對兩個陣列的對比。
1. 把兩個陣列轉化為字串的形式比較,如下:
a. 當兩個陣列元素型別相同,順序相同時,直接判斷是否相等,結果不相等;轉化為字串後,結果相等;
var a=[1, 2, 3, 4];執行結果:var b =a.slice();
console.log(a);
console.log(json.stringify(a) == json.stringify(b));
2.當兩個陣列元素型別不同,順序相同時,用tostring()轉化為字串,結果相等;用stringify轉化為字串,結果不相等;
var a=[1, 2, 3, 4];執行結果如下:var b = ['1', 2, 3, 4];
console.log(a);
console.log(json.stringify(a) == json.stringify(b));
3. 當兩個陣列不相同時,先排序,再轉化為json字串比較,結果相等:
var a = [1, 2, 3, 4];執行結果:var b = [4, 2, 3, 1];
console.log(a.sort());
console.log(b.sort());
console.log(json.stringify(a.sort()) == json.stringify(b.sort()));
4.當陣列包含object時,先排序,再進行比較,結果相等:
var a=[, 2, 3, 4];執行結果:var b = [4, 2, 3, ];
console.log(a.sort());
console.log(b.sort()); console.log(json.stringify(a.sort()) == json.stringify(b.sort()));
從以上可以看出:
1. 如果兩個陣列元素型別相同,順序相同時,用stringify轉化為字串後進行比較;
2. 如果兩個陣列元素型別相同,順序不相同時,排序後,用stringify轉化為字串再進行比較;
3.兩個陣列元素型別不同時,用stringify轉化為字串後進行比較,陣列不相等;用tostring()轉化為字串後進行比較,陣列相等;
三、 解決方案
比較兩個陣列是否相等,實質上是比較兩相陣列的原型是否相等,**如下:
C 之 比較兩個word文件的內容
利用 microsoft.office.interop.word 元件進行比較。引入命名空間 using word2013 microsoft.office.interop.word 如下 進行與word2013.document類建立時指定的檔案比較,然後將差異顯示在targetfile,並儲存退...
JS學習之比較運算子
doctype html utf 8 比較運算子 title console.log 1 2 console.log 1 2 console.log 2 2 console.log 3 2 console.log 37 37 程式中全等的概念,要求數之和資料型別都相等 console.log 37 ...
js 比較兩個日期的大小
使用gettime 函式比較兩個日期的大小 定義和用法 gettime 函式的返回值為number型別,可返回距 1970 年 1 月 1 日之間的毫秒數。語法 dateobject.gettime 返回值 dateobject 指定的日期和時間距 1970 年 1 月 1 日午夜 gmt 時間 之...