苏州网站建设老板,教人做窗帘的视频网站,郑州网站优化托管,索象营销传播集团一.数组遍历
function Uniarray(array) {// 接收去重后的数组let resArr [];// 遍历数组for (let i 0; i array.length; i) {let isFind false;// 检查当前元素是否已存在于结果数组中for (let j 0; j resArr.length; j) {// 使用严格相等运算符#xff08; [];// 遍历数组for (let i 0; i array.length; i) {let isFind false;// 检查当前元素是否已存在于结果数组中for (let j 0; j resArr.length; j) {// 使用严格相等运算符来比较元素if (objectsAreEqual(array[i], resArr[j])) {isFind true;break;}}// 如果元素不在结果数组中则添加到结果数组if (!isFind) {resArr.push(array[i]);}}return resArr;
}
二.判断是否是原始值
使用typeof运算符来判断一个值是否是原始值。原始值包括数字、字符串、布尔值、null和undefined。
/如果一个值不是原始值那么它就是对象或函数。
function isPrimitive(value) {return value null || typeof value ! object typeof value ! function;
}
三.对象比较
function objectsAreEqual(obj1, obj2) {if (isPrimitive(obj1) || isPrimitive(obj2)) {return obj1 obj2;}const keys1 Object.keys(obj1);const keys2 Object.keys(obj2);if (keys1.length ! keys2.length) {return false;}// !keys2.includes(key)检查当前属性名是否也存在于中keys2。// 如果键不存在于keys2则意味着两个对象具有不同的键集并且该函数应返回false。// !objectsAreEqual(obj1[key], obj2[key])比较与两个对象中当前键关联的值。// 它递归调用objectsAreEqual以检查值是否相等以及存在对象嵌套的情况。//如果值不相等则意味着对象不相等函数应返回false。for (const key of keys1) {if (!keys2.includes(key) || !objectsAreEqual(obj1[key], obj2[key])) {return false;}}return true;
}
四.运行测试
/*** 数组去重* param array * return array*/
function Uniarray(array) {let resArr [];for (let i 0; i array.length; i) {let isFind false;for (let j 0; j resArr.length; j) {if (objectsAreEqual(array[i], resArr[j])) {isFind true;break;}}if (!isFind) {resArr.push(array[i]);}}return resArr;
}/*** 判断原始值* param ** return boolean*/function isPrimitive(value) {return value null || typeof value ! object typeof value ! function;
}/*** * param object * param object * return boolean*/function objectsAreEqual(obj1, obj2) {if (isPrimitive(obj1) || isPrimitive(obj2)) {return obj1 obj2;}const keys1 Object.keys(obj1);const keys2 Object.keys(obj2);if (keys1.length ! keys2.length) {return false;}for (const key of keys1) {if (!keys2.includes(key) || !objectsAreEqual(obj1[key], obj2[key])) {return false;}}return true;
}const arr1[{a:1,b:1},{a:1,b:2},{a:1,b:1}]
const arr2[{a:1,b:undefined},{a:1,b:2},{a:1,c:undefined}]
const arr3[{a:{c:1},b:1},{a:{c:1},b:1},{a:{c:1},b:2}]
console.log(Uniarray(arr1))
console.log(Uniarray(arr2))
console.log(Uniarray(arr3))