var compactObject = function (obj) {
if (obj === null || typeof obj !== 'object') {
return obj;
}
if (Array.isArray(obj)) {
return obj.filter(Boolean).map(compactObject);
}
const result = {};
for (const key in obj) {
let value = compactObject(obj[key]);
if (Boolean(value)) {
result[key] = value;
}
}
return result;
};
首先要將物件和陣列型別的值排除,直接 return,所以使用 typeof 去判斷,而 typeof null 是 object (JS 的 bug),所以額外拉出來處理
再來處理陣列,用 filter 將 falsy value 過濾,用遞迴的方式處理深層的陣列
最後處理物件,物件的值因為可能是陣列,所以也用遞迴方式處理,最後將過濾 falsy 後的值存到要最終結果的物件內
時間複雜度: O(n)
空間複雜度: O(n)
var cancellable = function (fn, args, t) {
// call setTimeout, which is set to call fn after t amount of time
var timeout = setTimeout(() => fn(...args), t);
// define a clearTimeout
var cancelFn = () => clearTimeout(timeout);
// When/if we call the function, it will return cancelFn,
// and since the return line calls (and consequentially executes)
// cancelFn, timeout will be cancelled, thereby cancelling fn
return cancelFn;
};
題目看了會兒才懂,簡單講就是如果在取消的時間到時還沒執行 fn
函式的話,就呼叫 cancelFn
函式,反之則執行 fn
函式,cancelFn
函式就不執行
return 的部分讓我想到 React useEffect 的 clearup 函式
時間複雜度: O(1)
空間複雜度: O(1)
var join = function (arr1, arr2) {
const resultMap = new Map();
[...arr1, ...arr2].forEach((ele) => {
if (!resultMap.get(ele.id)) {
resultMap.set(ele.id, ele);
} else {
const preObj = resultMap.get(ele.id);
resultMap.set(ele.id, { ...JSON.parse(JSON.stringify(preObj)), ...ele });
}
});
const result = [];
resultMap.forEach((value) => {
result.push(value);
});
return result.sort((a, b) => a.id - b.id);
};
var join = function (arr1, arr2) {
const result = [];
[...arr1, ...arr2].forEach((ele) => {
if (!result[ele.id]) {
result[ele.id] = ele;
} else {
result[ele.id] = { ...JSON.parse(JSON.stringify(result[ele.id])), ...ele };
}
});
return Object.values(result);
};
將兩個陣列合併,然後用 hashMap 或是物件去儲存元素值,特別的是會用 id 當作 key,所以檢查到重覆 key 時就去做題目要求的處理
時間複雜度: O(n)
空間複雜度: O(n)
var addTwoPromises = async function (promise1, promise2) {
const [res1, res2] = await Promise.all([promise1, promise2]);
return res1 + res2;
};
這題考的是 Promise.all()
,可參考我以前寫的文章:
https://ithelp.ithome.com.tw/articles/10293058
時間複雜度: O(max(promise1 time, promise2 time))
空間複雜度: O(1)