猫腻

文章 评论 浏览 31

猫腻 2022-05-04 13:54:54

好了,原题答案也来了

// 一堆牌,[1,2,3,4,5,6,7,8,9,10,11,12,13],将牌堆第一张放到桌子上,
// 再将接下来的牌堆的第一张放到牌底,如此往复,牌底到牌顶顺序 
const poker = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
const makePoker = _list => {
  const rst = []
  const list = _list.slice()
  while (list.length) {
    rst.push(list.pop())
    list.length && list.unshift(list.pop()) // 还有牌才会执行这一步
  }
  return rst
}
console.log(makePoker(poker)) // [ 13, 11, 9, 7, 5, 3, 1, 10, 6, 2, 8, 12, 4 ]

// 如果已知排好序后的牌是[1,2,3,4,5,6,7,8,9,10,11,12,13],求初始牌?
const reversePoker = _list => {
  const rst = []
  const list = _list.slice()
  while (list.length) {
    rst.push(list.pop())
    list.length && rst.push(rst.shift()) // 桌面的牌拿完了就不能再执行了,也就是桌面还有牌才执行
  }
  return rst
}
console.log(reversePoker(poker)) // [ 7, 10, 6, 13, 5, 9, 4, 11, 3, 8, 2, 12, 1 ]

// 下面是验证
console.log(makePoker(reversePoker(poker))) // [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 ]
console.log(reversePoker(makePoker(poker))) // [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 ]

这里使用的是:1是牌顶,13是牌顶的初始牌,方向不同结果也会不同

第 126 题:扑克牌问题

猫腻 2022-05-04 13:50:46

这句可以优化
var newObj = obj instanceof Array ? [] : {};
可以这么写 var newObj = new obj.constructor
我还想问下,如果里面好几个元素都是一样的,请问怎么优化? 遇到面试官问了。。

请问你所说的,好几个元素都是一样的,是什么意思?我所理解的,如果是数组,即使值一样,但它们的 index 不一样吧?如果是对象,即使它们的值一样,但它们的 key 不一样吧?

是指将多个对象/数组拷贝合并到一个对象/数组中的情况吗?不是单单地对一个数组/对象进行深/浅拷贝。

JavaScript 专题之深浅拷贝

猫腻 2022-05-04 13:33:52

模块化

模块化的作用

模块化是为了处理全局污染和依赖管理混乱的问题

模块化

因为一开始js本身没有提供模块化的机制,所以才会衍生出commonJS、AMD、CMD和UMD这么多模块化规范。js在ES6时原生提供了import和export模块化机制

commonJS

定义

文件即模块,每个文件通过module来表示,用require来引用其他依赖,用module.exports来导出自身

机制

通过require去引用文件时,会将文件执行一遍后,将其执行结果通过浅克隆的方式,写入全局内存。后续再require该路径,就直接从内存里取出,不需要重新执行对应的文件

特点

commonJS是服务器编程范式,因为服务器上所有文件都在硬盘里,通过同步加载的方式即可,所以该规范是同步加载规范。同时它是在运行时加载,也就是你可以在require里拼接变量,在加载时会自动识别出最终的实际路径

AMD

定义

define(module, [dep1, dep2], callback)

机制

通过require加载时,它会先加载对应的依赖,等依赖资源加载完之后,会执行回调函数,将依赖作为入参,执行对应的业务逻辑

特点

AMD机制是浏览器编程范式,它是在客户端使用的,由于资源都是在服务器上,所以它是异步加载。同时,它最大的特点是强调依赖前置。

CMD

定义

机制和AMD类似,最大的区别就是CMD强调延迟加载,对应的依赖等到回调函数里执行具体依赖语句,才会去加载,但是AMD在后续版本里也支持了延迟加载的写法

机制

同上

特点

同上

UMD

定义

CommonJS、AMD、CMD并行的状态下,就需要一种方案能够兼容他们,这样我们在开发时,
就不需要再去考虑依赖模块所遵循的规范了,而UMD的出现就是为了解决这个问题。

ES6

定义

通过import引入依赖,通过export导出依赖

机制

ES6的模块机制在依赖模块时并不会先去预加载整个脚本,而是生成一个只读引用,并且静态解析依赖,等到执行代码时,再去依赖里取出实际需要的模块

特点

编译时加载,不允许在里边引用变量,必须为真实的文件路径。可以通过调用import()语句,会生成一个promise去加载对应的文件,这样子就是运行时加载,可以在路径里边编写变量

第 26 题:介绍模块化发展历程

更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文