/**
* 记录6.6 徒儿的面试题
*/
// --------第一题:下段代码的输出是什么顺序
function testAsync() {
console.log("ok");
setTimeout(() => {
console.log(1);
});
new Promise(() => {
console.log(2);
}).then(() => {
console.log(3);
}).finally(() => {
console.log(4);
});
setTimeout(() => {
console.log(5);
});
console.log("ng");
}
// testAsync();
// ------第二题:实现数组去重
/**
* 几点思考:
* 1. 如果数组中有元素是对象呢?
* 2. 如果数组中有元素是function呢?
* 3. a = {a:0}; b = {a:0} a === b 吗?
* 4. 如果数组中有数组呢?(数组维度)
*
* @param {Array} targetArr the target array need to unique
* @returns {Array} result array
*/
function unique(targetArr) {
console.log("unique targetArr:", targetArr);
let type;
let resultArr = [];
for (let i = 0; i < targetArr.length; i++) {
type = typeof targetArr[i];
switch (type) {
case "function":
resultArr = uniqueFun(resultArr, targetArr[i]);
break;
case "object":
for (let j = 0; j < resultArr.length; j++) {
if (typeof resultArr[j] === "object") {
equalObj(resultArr[j], targetArr[i]);
}
}
break;
default:
if (resultArr.indexOf(targetArr[i]) < 0) {
resultArr.push(targetArr[i]);
}
break;
}
}
return resultArr;
}
function uniqueFun(resultArr, element) {
console.log("uniqueFun");
let isRepeat = false;
for (let i = 0; i < resultArr.length; i++) {
if (typeof resultArr[i] === "function") {
if (resultArr[i].toString() === element.toString) {
isRepeat = true;
}
}
}
if (!isRepeat) {
resultArr.push(element);
}
return resultArr;
}
function equalObj(obj1, obj2) {
console.log("uniqueObj");
let propsArr1 = Object.getOwnPropertyNames(obj1);
let propsArr2 = Object.getOwnPropertyNames(obj2);
if (propsArr1.length !== propsArr2.length) {
return false;
}
for (const p of obj1) {
if (obj2.hasOwnProperty(p) !== obj1.hasOwnProperty(p)) {
return false;
}
let pType1 = typeof obj1[p];
let pType2 = typeof obj2[p];
if (pType1 !== pType2) {
return false;
}
if (pType1 === "object") {
equalObj(obj1[p], obj2[p]);
}
if (obj1[p] instanceof Array && obj2[p] instanceof Array) {
let arr1 = obj1[p];
let arr2 = obj2[p];
if (arr1.length !== arr2.length) {
return false;
}
}
}
return true;
}
function uniqueArr(array, array1) {
return array.toString() === array1.toString();
}
<!--let a = Symbol("sdk");-->
<!--let arr = [equalObj, {a: 0}, [1, 2, uniqueArr], 3, a];-->
<!--let arr1 = [uniqueArr, {a: 0}, [1, 2, uniqueArr], 3, a];-->
console.log(arr instanceof Array);