JS學習之 比較兩個Object陣列是否相等

2021-10-01 14:17:03 字數 1694 閱讀 4984

一、問題

在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 時間 之...