Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >20181125_ARTS_week22

20181125_ARTS_week22

作者头像
Bob.Chen
发布于 2018-12-17 08:20:48
发布于 2018-12-17 08:20:48
49000
代码可运行
举报
运行总次数:0
代码可运行

本周算法题 Maximum Subarray,看了一篇介绍 ES6 展开操作符和解构技巧的文章,分享了 JavaScript 中获取文件后缀名的小坑与解法,分享了对于产品给用户做选择的一点看法。

Algorithm

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * Maximum Subarray
 * https://leetcode.com/problems/maximum-subarray/
 * 
 * @param {number[]} nums
 * @return {number}
 */
var maxSubArray = function (nums) {
    for (let i = 1; i < nums.length; i++) {
        nums[i] = Math.max(nums[i], nums[i] + nums[i - 1]);
    }
    return Math.max(...nums);
};

console.log(maxSubArray([-2, 1, -3, 4, -1, 2, 1, -5, 4])) // 6

这个解法来自 https://leetcode.com/problems/maximum-subarray/discuss/139218/Javascript-very-clear-and-short-DP-solution

非常精妙的一个解法,每个数和前一个比,大的保存下来留着和下一个比,短短几行就是一个非常简洁的动态规划算法。

Review

JavaScript hacks for ES6 hipsters

https://hackernoon.com/javascript-hacks-for-es6-hipsters-67d633ce8ace

文章中介绍了几个 ES6 的有趣用法。

比如用解构去做交换:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let a = 'world', b = 'hello'
[a, b] = [b, a]
console.log(a) // -> hello
console.log(b) // -> world
// Yes, it's magic

解构结合 async/await:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const [user, account] = await Promise.all([
  fetch('/user'),
  fetch('/account')
])

展开操作符用在数组连接上:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const one = ['a', 'b', 'c']
const two = ['d', 'e', 'f']
const three = ['g', 'h', 'i']
// Old way #1
const result = one.concat(two, three)
// Old way #2
const result = [].concat(one, two, three)
// New
const result = [...one, ...two, ...three]

展开操作符用在浅拷贝上:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const obj = { ...oldObj }
const arr = [ ...oldArr ]

解构用在让函数参数更具有可读性上:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const getStuffNotBad = (id, force, verbose) => {
  ...do stuff
}
const getStuffAwesome = ({ id, name, force, verbose }) => {
  ...do stuff
}
// Somewhere else in the codebase... WTF is true, true?
getStuffNotBad(150, true, true)
// Somewhere else in the codebase... I ❤ JS!!!
getStuffAwesome({ id: 150, force: true, verbose: true })

总体来说是篇不错的文章,合理运用这些小技巧,可以让你的代码更简洁易懂。

Tip

介绍下 JavaScript 中获取文件后缀名。

一般情况下我们通常可以用正则表达式或者 String 的 split 方法来做。

比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function getFileExtension2(filename) {
  return filename.split('.').pop();
}

这种方法通常情况下都能得到正确的后缀名,但是在一些特别情况下会有问题,比如 "abc", ".abc" 这里后缀名都会被认为是 abc。

一种更好的方法是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function getFileExtension3(filename) {
  return filename.slice((filename.lastIndexOf(".") - 1 >>> 0) + 2);
}

console.log(getFileExtension3(''));                            // ''
console.log(getFileExtension3('filename'));                    // ''
console.log(getFileExtension3('filename.txt'));                // 'txt'
console.log(getFileExtension3('.hiddenfile'));                 // ''
console.log(getFileExtension3('filename.with.many.dots.ext')); // 'ext'

先用 lastIndexOf 找到 . 最后出现的位置,如果是 "abc" 会返回 -1,如果是 ".abc" 会返回 0,减1之后变为 -2 和 -1,然后做一个无符号右移操作,分别为 4294967294, 4294967295,在这里其实就是去除符号,就算后面 +2 也无济于事,所以最后返回的是 ''

而正常 case 下,-1 之后也是大于等于0的,右移没产生什么作用,之后的 +2 把前面减的 1 给补回来,顺便移到下一位,开始截取。

Share

这周讨论到公司产品在小程序上的一些问题。这里的小程序不单单指微信小程序,甚至包括支付宝小程序,百度小程序等。

一般情况下,说到小程序,大多指微信小程序,不单单是因为微信小程序名气最大,覆盖面最广,还因为微信的使用频率最高,见过手机没装支付宝的,但基本没见过手机没装微信的。

有时候我们在考虑一个产品的时候,会想我们不单提供微信小程序,还提供支付宝小程序,让用户可以选择。

个人觉得,这是一个比较大的误区。让用户做选择不一定是个好主意,好钢用在刀刃上,首先可以算下投入产出比,同样投入做微信小程序和支付宝小程序,如果微信的使用率是 50%,支付宝的使用率是 5%,那在产品形态上自然优先微信小程序,那 5% 的支付宝小程序一般也可以轻易的被微信小程序给取代。

说回给用户选择这个问题上来。往往我们觉得给用户选择是对用户最大的尊重,而实际上却不然。乔布斯没给用户选择,而是告诉用户你用的这个就是最好的,你不需要做选择。就像吃火锅一样,五花八门挑花了眼,浪费太多精力,我最喜欢的就是告诉我先吃啥后吃啥,涮几分钟,吃就得了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-11-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
LeetCode 53.最大子序列和 - JavaScript
题目描述:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
心谭博客
2020/04/21
1K0
【leetcode刷题】20T22-最大子序和
https://leetcode-cn.com/problems/maximum-subarray/
木又AI帮
2020/02/25
3190
画解算法:53. 最大子序和
https://leetcode-cn.com/problems/maximum-subarray/
灵魂画师牧码
2019/06/27
5850
画解算法:53. 最大子序和
​LeetCode刷题实战53:最大子序和
https://leetcode-cn.com/problems/maximum-subarray/
程序员小猿
2021/01/20
3100
LeetCode 53. 最大子序和(动态规划)
题目链接:https://leetcode-cn.com/problems/maximum-subarray/ 《剑指Offer》同题:面试题42. 连续子数组的最大和
Michael阿明
2021/02/20
2930
LeetCode 53. 最大子序和(动态规划)
20181202_ARTS_week23
ES6: Understanding the destructuring assignment syntax in Javascript
Bob.Chen
2018/12/21
3580
一看就会:最大自序和状态压缩算法
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
代码宇宙
2023/02/23
1900
20181013_ARTS_week16
这题没好好审题,题目中说不能增加其它空间,以及要在原数组中改,没注意最后只要前 n 位是无重复的就可以了。
Bob.Chen
2018/10/15
4300
53 最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
木瓜煲鸡脚
2021/03/09
2720
贪心算法:最大子序和
题目地址:https://leetcode-cn.com/problems/maximum-subarray/
代码随想录
2020/12/14
8590
贪心算法:最大子序和
前端模块化开发--ES6相关知识
Promise 是异步编程的一种解决方案,避免了传统的回调函数的层层嵌套,也就是常说的“回调地狱”。
MiChong
2020/09/24
5400
最大子序和,又贪心又DP
力扣题目链接:https://leetcode-cn.com/problems/maximum-subarray
代码随想录
2021/11/16
3220
20181021_ARTS_week17
Improving your Async functions with WebWorkers
Bob.Chen
2018/11/08
3610
【ECMAScript6】es6 要点(一)剩余参数 | 数组方法 | 解构赋值 | 字符串模板 | 面向对象 | 模块
let : 不能重复声明,变量-可以修改,定义自身的块级作用域 const : 不能重复声明,常量-不能修改,块级作用域 。
前端修罗场
2023/10/07
2150
贪心——53. 最大子数组和
示例 1: 输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
向着百万年薪努力的小赵
2022/12/02
3850
贪心——53. 最大子数组和
最大子序列的和_子序列和最大值
https://leetcode-cn.com/problems/maximum-subarray/description/
全栈程序员站长
2022/08/03
3700
最大子序列的和_子序列和最大值
ES6前端技术课
3.ES6是目前前端公司比较流行的开发技术,比如说微信开发、支付宝小程序、前端页面等等
张哥编程
2024/12/13
990
JavaScript的奇技淫巧
在 JavaScript 中 数组(Array)随处可见,使用ECMAScript 6 中的新特性 扩展运算符 我们可以做很多很棒事情。
前端进击者
2021/07/27
5470
动态规划:最大子序和
题目地址:https://leetcode-cn.com/problems/maximum-subarray/
代码随想录
2021/04/07
4270
动态规划:最大子序和
支付宝小程序开发准备工作
在正式开发支付宝小程序之前,我们要做一些准备工作,比如说封装一下config文件、request请求、api接口集中定义,自定义的工具脚本等。文末还有彩蛋哈~
冬夜先生
2021/10/28
3980
相关推荐
LeetCode 53.最大子序列和 - JavaScript
更多 >
加入讨论
的问答专区 >
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档