Files
mixly3/common/modules/mixly-modules/common/marray.js
2024-07-19 10:16:00 +08:00

68 lines
1.8 KiB
JavaScript

goog.loadJs('common', () => {
goog.require('Mixly');
goog.provide('Mixly.MArray');
const { MArray } = Mixly;
MArray.equals = (x, y) => {
// If both x and y are null or undefined and exactly the same
if (x === y) {
return true;
}
// If they are not strictly equal, they both need to be Objects
if (!(x instanceof Object ) || !(y instanceof Object)) {
return false;
}
//They must have the exact same prototype chain,the closest we can do is
//test the constructor.
if (x.constructor !== y.constructor) {
return false;
}
for (var p in x) {
//Inherited properties were tested using x.constructor === y.constructor
if (x.hasOwnProperty(p)) {
// Allows comparing x[ p ] and y[ p ] when set to undefined
if (!y.hasOwnProperty(p)) {
return false;
}
// If they have the same strict value or identity then they are equal
if (x[p] === y[p]) {
continue;
}
// Numbers, Strings, Functions, Booleans must be strictly equal
if ( typeof(x[p]) !== "object" ) {
return false;
}
// Objects and Arrays must be tested recursively
if (!MArray.equals(x[p], y[p])) {
return false;
}
}
}
for (p in y) {
// allows x[ p ] to be set to undefined
if (y.hasOwnProperty(p) && !x.hasOwnProperty(p)) {
return false;
}
}
return true;
}
MArray.remove = (arr, data) => {
let arrLen = arr.length;
for (let i = 0; i < arrLen; i++) {
if (arr[i] !== data) {
continue;
}
arr.splice(i, 1);
i--;
arrLen--;
}
}
//数组去除重复元素
MArray.unique = (arr) => {
return Array.from(new Set(arr));
}
});