Better

Ethan的博客,欢迎访问交流

ARTS 打卡第十七周

本次打卡值得关注的内容有,算法题为删除排序链表中的重复元素,Review 主要内容为 I didn't know that,本周 Tips 内容为 angular 中组件状态逻辑复用方案的一些思考和 ngFor 优化,分享的内容为 Ant Design Pro 简单使用总结。

Algorithm

本周继续完成 easy part,名为 remove duplicates from sorted list,删除排序列表中的重复元素,解该题开始并没有主要到是已经排序链表,因此给出的解法,性能上会有所损耗,不过结果还算好,击败了 84.36 % 用户,针对优化的方案,以后给吧!!!

var deleteDuplicates = function(head) {
    var res = new ListNode();
    if(!head) {
        return res.next;
    }
    var object = Object.create(null);
    var currentElement = res;
    while(head.next) {
        var val = head.val;
        if(!object[val]) {
            object[val] = true;
            currentElement.next = new ListNode(val);
            currentElement = currentElement.next;
        }
        // 移动到下一个元素
        head = head.next;
    }
    // 处理最后值
    if(!object[head.val]) {
        currentElement.next = new ListNode(head.val);
    }
    return res.next;
};

function ListNode(val) {
    this.val = val;
    this.next = null;
}

Review

本周阅读的文章来自 youtube 一个视频 I did't know that,作者的个人博客地址 博客地址,本次分析大概内容有

  • JSON.stringify 的多参数和 toJSON 属性
  • 字符串函数 localeCompare 函数
  • 字符串函数 normalize 函数
  • Array.from 支持第二个回调函数,可以实现 map 功能
  • 原生 Global 提供的 isNaN 函数,会将 NaN 判断为 true,并且 isNaN !== Number.isNaN
  • 数组的 indexOf 无法判断是否存在 NaN,可以使用 includes 避免这个问题
  • 不要使用函数的 length 属性来判断参数个数,因为对于 ES6 提供的默认参数和剩余参数无法生效
  • finally 和 return 执行

Tip

最近在使用 angular 的过程中,存在一部分组件状态逻辑需要被其他组件复用,考虑到使用组件继承的方式,但是发现一个问题,就是如果父组件使用了某个生命周期钩子,子组件同样需要该声明周期时,此时父组件的生命周期钩子便不会触发,不禁开始思考,组件继承貌似并不是 angular 中复用逻辑的正确打开方式,一顿查阅之后,却没有发现更加何时的方式,在这里 marker 一下,非常值得思考。

还有就是 ngFor 的问题,angular 并不同于组件 Vue 或 React 强制要求在列表渲染时,添加 key 属性,最近在使用 ngFor 循环出组件时候,发现每次父组件重新渲染会导致子组件销毁再新建,这显然不是我需要的,幸运的是,angular 为 ngFor 提供了渲染优化,那就是 trackBy 接受一个函数引用,函数入参为循环对象和 index,在函数中返回一个唯一的值作为 key 即可。

Share

本周分享为 Ant Design Pro 简单使用总结



留言