Browse Source

ArrayEquals

zhuth 6 years ago
parent
commit
3024906a28
2 changed files with 12 additions and 25 deletions
  1. 2 1
      src/models/dashboardDesigner.js
  2. 10 24
      src/utils/baseUtils.js

+ 2 - 1
src/models/dashboardDesigner.js

@@ -5,6 +5,7 @@ import parseChartOption from './parseChartOption'
 import moment from 'moment'
 import URLS from '../constants/url'
 import CHART_TYPE from './chartType.json'
+import { ArrayEquals } from '../utils/baseUtils.js'
 
 /**
  * 获得报表中图表的真实过滤规则
@@ -534,7 +535,7 @@ export default {
                     let newDataSourceCodes = nrc.relations.map(r => r.dataSource.code);
                     let newColumns = nrc.relations.map(r => r.column.name);
 
-                    if(!oldDataSourceCodes.equals(newDataSourceCodes) || !oldColumns.equals(newColumns)) { // 如果改变了数据源或者数据列
+                    if(!ArrayEquals(oldDataSourceCodes, newDataSourceCodes) || !ArrayEquals(oldColumns, newColumns)) { // 如果改变了数据源或者数据列
                         willRemove = true;
                     }
                    

+ 10 - 24
src/utils/baseUtils.js

@@ -171,34 +171,20 @@ function arrayToTree(data, parent, $id, $pid, $sub) {
     return tree;
 }
 
-export { remove, isEqual, getUrlParam, hashcode, delay, dateFormat, arrayToTree };
+function ArrayEquals(arr1, arr2) {
+    if(!arr1 || !arr2) return false;
+    if (arr1.length !== arr2.length) return false;
 
-// Warn if overriding existing method
-if(Array.prototype.equals)
-    console.warn("Overriding existing Array.prototype.equals. Possible causes: New API defines the method, there's a framework conflict or you've got double inclusions in your code.");
-// attach the .equals method to Array's prototype to call it on any array
-Array.prototype.equals = function (array) {
-    // if the other array is a falsy value, return
-    if (!array)
-        return false;
-
-    // compare lengths - can save a lot of time 
-    if (this.length !== array.length)
-        return false;
-
-    for (var i = 0, l = this.length; i < l; i++) {
-        // Check if we have nested arrays
-        if (this[i] instanceof Array && array[i] instanceof Array) {
-            // recurse into the nested arrays
-            if (!this[i].equals(array[i]))
+    for (var i = 0, l = arr1.length; i < l; i++) {
+        if (arr1[i] instanceof Array && arr2[2] instanceof Array) {
+            if (!arr1[i].ArrayEquals(arr2[i]))
                 return false;       
         }           
-        else if (this[i] !== array[i]) { 
-            // Warning - two different object instances will never be equal: {x:20} != {x:20}
+        else if (arr1[i] !== arr2[i]) { 
             return false;   
         }           
-    }       
+    }
     return true;
 }
-// Hide method from for-in loops
-Object.defineProperty(Array.prototype, "equals", {enumerable: false});
+
+export { remove, isEqual, getUrlParam, hashcode, delay, dateFormat, arrayToTree, ArrayEquals };