20180811_ARTS_week07

Posted on 2018-08-11 in ARTS by yucongchen

Algorithm

/**
 * Reverse Integer
 * @param {number} x
 * @return {number}
 */
var reverse = function (x) {
    var rs;
    if (x < 0) {
        rs = -(('' + x).slice(1).split('').reverse().join(''));
    } else {
        rs = +(('' + x).split('').reverse().join(''));
    }

    if (-Math.pow(2, 31) > rs || Math.pow(2, 31) - 1 < rs) {
        return 0;
    } else {
        return rs;
    }
};

console.log(reverse(123))   //321
console.log(reverse(-123))  //-321
console.log(reverse(120))   //21

这个思路是转成字符串,然后再倒序再转回来。

下面这个思路是每次对 10 取余,然后对前一次的结果乘 10。

var reverse = function (x) {
    let rs = 0;
    while (x !== 0) {
        rs = rs * 10 + x % 10;
        x = Math.trunc(x / 10);
    }

    return Math.abs(rs) >= 2147483648 ? 0 : rs;
};

Review

https://medium.freecodecamp.org/prototype-in-js-busted-5547ec68872

文章主要介绍了 JavaScript 中的 prototype,从原始类型讲起,到 Object 和 Function prototype 的关系。

Object instanceof Function
Object.__proto__.constructor === Function

Object instanceof Object
Object.__proto__.__proto__.constructor === Object

Function instanceof Function
Function.__proto__.constructor === Function

Function instanceof Object
Function.__proto__.__proto__.constructor === Object

可能是英语理解的关系,感觉讲的有点绕,不是特别清楚,个人推荐《JavaScript 面向对象编程指南》,讲的比较清楚。

Tip

介绍一下 JavaScript 做深拷贝的两种方式。

function deepCopy(obj) {
    let copy = {};

    // 如果是基本类型直接赋值,
    // 如果是数组则拷贝,
    // 其他对象则递归调用deepCopy方法
      Object.keys(obj).forEach(key => {

        if (obj[key] instanceof Array) {
          copy[key] = Array.from(obj[key]);
        }
        else if (typeof obj[key] === 'object') {
          copy[key] = deepCopy(obj[key]);
        }
        else {
          copy[key] = obj[key];
        }
      })

    return copy;
  }

  function deepCopy2(obj) {
    return JSON.parse(JSON.stringify(obj));
  }

deepCopy 函数是比较传统的深拷贝,信息会全部保留。 而 deepCopy2 是利用了 json 的序列化反序列化来做深拷贝,这种方式会把对象值是 function 的信息搞丢,在只是对一些数据做深拷贝的时候可以使用。

性能方面,当做拷贝的对象数据项比较少时,json 的方式会快很多,而当数据项比较多的时候,json 耗时明显增加,而第一种方式相对来讲增加的不多。

Share

这周读了二爷的专栏,其中有一篇讲『用最少的资源给你的产品试试水』。

想到组内上一年做的一个组内项目,大致是从已有的数据仓库拿数据然后做可视化给产品或者设计同学看。因为数据仓库一些接口的原因,速度非常慢,而且每个页面有很多需要人为配置的项目。做出来之后,几乎没有人用,但是老板也不叫停,最后变成了一个 KPI 项目。

调研有时候是不完全靠谱的,一些用户嘴上说好好好要要要,实际做出来,如果不是他们工作中流程需要的一环,或者解决了很大痛点并且用户体验好,可能用户用个一两次就丢在角落了。

所以用最少的资源(哪怕手工更新)先给产品试试水,很重要。


碎碎念

记录一些所思所想,写写科技与人文,写写生活状态,写写读书心得,主要是扯淡和感悟。 欢迎关注,交流。

微信公众号:程序员的诗和远方

公众号ID : MonkeyCoder-Life

程序员的诗和远方