function isPrimitive(obj) {
return obj === null || !['object', 'function'].includes(typeof obj)
}
function objEqual(obj1, obj2) {
//console.log(isPrimitive(obj1) || isPrimitive(obj2))
if (isPrimitive(obj1) || isPrimitive(obj2)) {
return Object.is(obj1, obj2)
}
const obj1Entry = Object.entries(obj1);
const obj2Entry = Object.entries(obj2);
console.log(obj1Entry)
if (obj1Entry.length !== obj2Entry.length) {
return false
}
for (const [k1, v1] of obj1Entry) {
if (!(k1 in obj2) || !objEqual(v1, obj2[k1])) {
return false;
}
}
return true
}
function uniqueArray(arr) {
let newArr = []
for (let i = 0; i < arr.length; i++) {
const item = arr[i]
let isFind = false
for (let j = 0; j < newArr.length; j++) {
const item1 = newArr[j]
if (objEqual(item, item1)) {
isFind = true
break
}
}
if (!isFind) {
newArr.push(item)
}
}
return newArr
}
const arr = [{ 'a': 1, 'b': 2 }, { 'a': 1, 'c': undefined }, { 'b': 2, 'a': 1 }, null, null, undefined, undefined, { 'aa': { 'bb': 1 } }, { 'aa': { 'bb': 1 } }]
console.log(uniqueArray(arr))