We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
题目:
旋转数组
代码:
/** * @param {number[]} nums * @param {number} k * @return {void} Do not return anything, modify nums in-place instead. */ var rotate = function(nums, k) { let len = nums.length; nums.splice(0, 0, ...nums.splice(len - k % len)); };
思路: 刚开始的思路是从最后一个元素开始,一个个地移到数组的首位来实现。 后来再一想,既然都知道要移动几个了(k),不如一次性移动这些元素到首位来实现。
nums.splice(nums.length - k) 就是取出 num 的最后 k 个元素, 然后 nums.splice(0, 0, ...nums.splice(nums.length - k)) 加到 num 的首位之前, 从而实现了需求。
nums.splice(nums.length - k)
num
k
nums.splice(0, 0, ...nums.splice(nums.length - k))
对比: 与最高分对比: 本代码运行 34 个测试用例花费约 108ms,平均一个测试用例约 3ms 最高分代码运行 34 个测试用例花费约 108ms,平均一个测试用例约 3ms 注:两份代码都在本机上运行(不同机器性能不同)
/** * @param {number[]} nums * @param {number} k * @return {void} Do not return anything, modify nums in-place instead. */ var rotate = function(nums, k) { k %= nums.length nums.splice(0, 0, ...nums.splice(nums.length - k)) };
思路一致。
需求: 如果某个对象是一个类,则实例化它,否则...
方法:
typeof func === 'function' && /^class\s/.test(func + '')
return typeof thing === 'function' && thing.hasOwnProperty('prototype') && !thing.hasOwnProperty('arguments')
参考: How do you check the difference between an ECMAScript 6 class and function?
在实际开发中应充分测试后选取最适合实际需求的。
check-types.js - A little JavaScript library for asserting types and values
功能包括检查 JS 中的某个对象是否为某种数据类型、值的比较等。
方法: 使用 --unsafe-perm 选项
--unsafe-perm
原理: 这个报错通常出现在以某个非 root 用户运行 sudo npm install 。
sudo npm install
通过查看 npm 的源码可以发现,当 --unsafe-perm === false 时,npm 会获取 UID 或 GID 然后再以获取到的 UID 或 GID 再继续安装。也就是说,就算 sudo 了,如果没有 --unsafe-perm,那么 npm 还是会以当前用户(可能是非 root)来执行安装,所以就可能出现没有权限的问题。因此在 sudo 并且使用了 --unsafe-perm 才是真正提了权,否则 npm 内部会自动忽视提权。
--unsafe-perm === false
sudo
参考:
npm ci
npm install --no-save
npm run package
npm run start
阅读: Handling Errors in JavaScript: The Definitive Guide
点评:
这篇文章首先对 JS 错误处理涉及到的基本概念进行详细阐述, 然后分别在服务端和客户端各展示了一个错误处理的示例。 其阐述有助于理解基本概念,同时代码也可作为开发过程中的模板使用。 相关代码地址:gisderdube/graceful-error-handling
文章内容结构:
Error
throw new Error(message)
try {} cache (e) {} finall {}
callback
promise.catch(e => {})
补充一个 redux-saga 中的错误处理注意事项: 一个 effect 如果内部包含 fork 任务,那么不能在这个 effect 内部捕捉到这个 fork 任务的错误,而只能在这个 effect 的外部来捕捉到这个 fork 任务的错误。 如:(参考:redux-saga 的 fork model - Error 传播)
//... imports function* fetchAll() { try { const task1 = yield fork(fetchResource, 'users') const task2 = yield fork(fetchResource, 'comments') } catch (e) { // 什么也捕捉不到 } yield call(delay, 1000) } function* fetchResource(resource) { const {data} = yield call(api.fetch, resource) yield put(receiveData(data)) } function* main() { try { yield call(fetchAll) } catch (e) { // 要在这里捕捉 } }
分享原创一篇: Orange Pi GPIO 串口通讯 —— 安装并使用 Linux 原生工具测试 与 Nodejs SerialPort 开发的过程
The text was updated successfully, but these errors were encountered:
No branches or pull requests
第三周(2019.4.15~2019.4.21)
Algorithm 旋转数组
题目:
旋转数组
代码:
思路:
刚开始的思路是从最后一个元素开始,一个个地移到数组的首位来实现。
后来再一想,既然都知道要移动几个了(k),不如一次性移动这些元素到首位来实现。
nums.splice(nums.length - k)
就是取出num
的最后k
个元素,然后
nums.splice(0, 0, ...nums.splice(nums.length - k))
加到num
的首位之前,从而实现了需求。
对比:
与最高分对比:
本代码运行 34 个测试用例花费约 108ms,平均一个测试用例约 3ms
最高分代码运行 34 个测试用例花费约 108ms,平均一个测试用例约 3ms
注:两份代码都在本机上运行(不同机器性能不同)
思路一致。
Tip
Tip#1 JS 判断一个对象是否是一个 ES6 类
需求:
如果某个对象是一个类,则实例化它,否则...
方法:
typeof func === 'function' && /^class\s/.test(func + '')
return typeof thing === 'function' && thing.hasOwnProperty('prototype') && !thing.hasOwnProperty('arguments')
参考:
How do you check the difference between an ECMAScript 6 class and function?
在实际开发中应充分测试后选取最适合实际需求的。
Tip#2 JS 类型判断工具库 check-type.js
check-types.js - A little JavaScript library for asserting types and values
功能包括检查 JS 中的某个对象是否为某种数据类型、值的比较等。
Tip#3 nodejs 安装 serialport 时报错 user "root" does not have permission to access the dev dir "/root/.node-gyp/10.9.0" 的解决方法与原理
方法:
使用
--unsafe-perm
选项原理:
这个报错通常出现在以某个非 root 用户运行
sudo npm install
。通过查看 npm 的源码可以发现,当
--unsafe-perm === false
时,npm 会获取 UID 或 GID 然后再以获取到的 UID 或 GID 再继续安装。也就是说,就算sudo
了,如果没有--unsafe-perm
,那么 npm 还是会以当前用户(可能是非 root)来执行安装,所以就可能出现没有权限的问题。因此在sudo
并且使用了--unsafe-perm
才是真正提了权,否则 npm 内部会自动忽视提权。参考:
npm ci
vs.npm install --no-save
for dist/prod (npm run package
electron-builder, ornpm run start
during last-stage testing)Review JS 错误处理指南
阅读:
Handling Errors in JavaScript: The Definitive Guide
点评:
这篇文章首先对 JS 错误处理涉及到的基本概念进行详细阐述,
然后分别在服务端和客户端各展示了一个错误处理的示例。
其阐述有助于理解基本概念,同时代码也可作为开发过程中的模板使用。
相关代码地址:gisderdube/graceful-error-handling
文章内容结构:
Error
throw new Error(message)
try {} cache (e) {} finall {}
callback
或promise.catch(e => {})
核心在于 自定义错误类型 和 在一个地方(比如中间件)来处理请求过程中的错误(比如返回错误信息等)
核心在于 把错误对象保存为状态 并 绑定到页面元素内容 来处理请求过程中的错误(比如在页面上提示错误信息)
补充一个 redux-saga 中的错误处理注意事项:
一个 effect 如果内部包含 fork 任务,那么不能在这个 effect 内部捕捉到这个 fork 任务的错误,而只能在这个 effect 的外部来捕捉到这个 fork 任务的错误。
如:(参考:redux-saga 的 fork model - Error 传播)
Share Orange Pi GPIO 串口通讯 —— 安装并使用 Linux 原生工具测试 与 Nodejs SerialPort 开发的过程
分享原创一篇:
Orange Pi GPIO 串口通讯 —— 安装并使用 Linux 原生工具测试 与 Nodejs SerialPort 开发的过程
The text was updated successfully, but these errors were encountered: