面向对象与函数式编程中的 event listener
在前端开发中,使用函数式的 JavaScript 语言,所以绝大部分的 API 设计中,都会把 event listener 设计成一个函数,在对应的时机直接调用这些函数。 12345const listener = (data) => { console.log(data);};addEventListener(listener); 在 android 开发中,最早使用面向对象的 Java 语言,后续即便换成支持函数式编程的 Kotlin 语言,绝大部分的 event listener 还是被设计成了一个对象,在对应的时机调用这些对象上的成员函数。 1234567var listener = object: Listener { override fun onChanged (data) { Log.d("data", data) }}addEventListener(listener) 两者之间其实并没有什么本质上的差异,无论是对象还是函数,其实都是一个引用而...
使用 HashMap 优化数组交集计算
在面试中,计算两个数组的交集是一个常见问题。初学者可能会想到使用两层 for 循环来解决: 123456789101112const intersection = (a, b) => { const res = new Set(); for (const itemA of a) { for (const itemB of b) { if (itemA === itemB) { res.add(itemA); break; } } } return res;}; 然而,这种方法的时间复杂度为 O(n²),效率较低。为提升效率,我们可以利用 HashMap 将复杂度降低到 O(n): 1234567891011121314const intersection2 = (a, b) => { const mapOfA = a.reduce((acc, item) => { acc[item] =...