帮你提高开发效率的JavaScript20个技巧


Posted in Javascript onJune 18, 2021
目录
  • 1. 申明和初始化数组
  • 2.进行求和、最小值和最大值
  • 3. 对字符串、数字或对象的数组进行排序
  • 4. 是否需要从一个数组中过滤掉无用的值?
  • 5. 为各种条件使用逻辑运算符
  • 6. 删除重复的值
  • 7. 创建一个计数器对象或Map
  • 8. 三元运算符很酷
  • 9. 与传统的once相比,for循环更快。
  • 10. 合并两个对象
  • 11. 箭头函数
  • 12. 可选链式
  • 13. 打乱一个数组
  • 14. 空值合并运算符
  • 15. Rest & Spread 运算符
  • 16. 缺省参数
  • 17. 将十进制转换为二进制或十六进制
  • 18. 使用解构简单交换2个值
  • 19. 单行回文检查
  • 20. 将对象的属性变成一个数组的属性
  • 总结

减少代码行数和加快开发的技术!

我们在开发中,经常要写一些函数,如排序、搜索、寻找唯一的值、传递参数、交换值等,在这里我列出了我搜集的一些技术资源,可以像高手一样写出这些函数!

帮你提高开发效率的JavaScript20个技巧

这些方法肯定会对你有帮助:

  • 减少LOC(代码行)的数量
  • 编码竞
  • 黑客马拉松
  • 或者其他限时任务

这些JavaScript黑客技术大多使用ECMAScript6(ES2015)以后的技术,尽管最新版本是ECMAScript11(ES2020)。

注意:下面所有的技巧都是在谷歌浏览器的控制台测试的。

 

1. 申明和初始化数组

可以用默认值来初始化特定大小的数组,如""、null或0。你可能已经把这些用于一维数组,但如何初始化二维数组/矩阵呢?

const array = Array(5).fill(''); 
// Output 
(5) ["", "", "", "", ""]
const matrix = Array(5).fill(0).map(()=>Array(5).fill(0)); 
// Output
(5) [Array(5), Array(5), Array(5), Array(5), Array(5)]
0: (5) [0, 0, 0, 0, 0]
1: (5) [0, 0, 0, 0, 0]
2: (5) [0, 0, 0, 0, 0]
3: (5) [0, 0, 0, 0, 0]
4: (5) [0, 0, 0, 0, 0]
length: 5

 

2.进行求和、最小值和最大值

使用reduce方法来快速进行基本的数学运算。

const array  = [5,4,7,8,9,2];

求和

array.reduce((a,b) => a+b);
// Output: 35

最大值

array.reduce((a,b) => a>b?a:b);
// Output: 9

最小值

array.reduce((a,b) => a<b?a:b);
// Output: 2

 

3. 对字符串、数字或对象的数组进行排序

有内置的sort()和reverse()方法来对字符串进行排序,但对数字或对象数组的排序呢?
数字和对象的排序技巧,可以按照递增和递减的顺序进行排序。

字符串排序

const stringArr = ["Joe", "Kapil", "Steve", "Musk"]
stringArr.sort();
// Output
(4) ["Joe", "Kapil", "Musk", "Steve"]
stringArr.reverse();
// Output
(4) ["Steve", "Musk", "Kapil", "Joe"]

数字排序

const array  = [40, 100, 1, 5, 25, 10];
array.sort((a,b) => a-b);
// Output
(6) [1, 5, 10, 25, 40, 100]
array.sort((a,b) => b-a);
// Output
(6) [100, 40, 25, 10, 5, 1]

对象排序

const objectArr = [ 
    { first_name: 'Lazslo', last_name: 'Jamf'     },
    { first_name: 'Pig',    last_name: 'Bodine'   },
    { first_name: 'Pirate', last_name: 'Prentice' }
];
objectArr.sort((a, b) => a.last_name.localeCompare(b.last_name));
// Output
(3) [{…}, {…}, {…}]
0: {first_name: "Pig", last_name: "Bodine"}
1: {first_name: "Lazslo", last_name: "Jamf"}
2: {first_name: "Pirate", last_name: "Prentice"}
length: 3

 

4. 是否需要从一个数组中过滤掉无用的值?

像0,undefined,null,false,"",''这样的值可以通过下面的技巧轻松过滤。

const array = [3, 0, 6, 7, '', false];
array.filter(Boolean);
// Output
(3) [3, 6, 7]

 

5. 为各种条件使用逻辑运算符

如果你想减少嵌套,比如if...else或switch,可以使用逻辑运算符AND/OR。

function doSomething(arg1){ 
    arg1 = arg1 || 10; 
// set arg1 to 10 as a default if it's not already set
return arg1;
}
let foo = 10;  
foo === 10 && doSomething(); 
// is the same thing as if (foo == 10) then doSomething();
// Output: 10
foo === 5 || doSomething();
// is the same thing as if (foo != 5) then doSomething();
// Output: 10

 

6. 删除重复的值

你可能已经在for循环中使用了indexOf(),它返回第一个找到的索引,或者使用较新的includes(),它从数组中返回布尔值true/false,以找出/删除重复的值。这里我们有两种更快捷的方法。

const array  = [5,4,7,8,9,2,7,5];
array.filter((item,idx,arr) => arr.indexOf(item) === idx);
// or
const nonUnique = [...new Set(array)];
// Output: [5, 4, 7, 8, 9, 2]

 

7. 创建一个计数器对象或Map

很多时候,需要通过创建计数器对象或Map来解决问题,该对象以变量为键,以其频率/出现次数为值来跟踪变量。

let string = 'kapilalipak';
const table={}; 
for(let char of string) {
  table[char]=table[char]+1 || 1;
}
// Output
{k: 2, a: 3, p: 2, i: 2, l: 2}

const countMap = new Map();
  for (let i = 0; i < string.length; i++) {
    if (countMap.has(string[i])) {
      countMap.set(string[i], countMap.get(string[i]) + 1);
    } else {
      countMap.set(string[i], 1);
    }
  }
// Output
Map(5) {"k" => 2, "a" => 3, "p" => 2, "i" => 2, "l" => 2}

 

8. 三元运算符很酷

你可以用三元运算符避免嵌套条件if...elseif...elseif。

function Fever(temp) {
    return temp > 97 ? 'Visit Doctor!'
      : temp < 97 ? 'Go Out and Play!!'
      : temp === 97 ? 'Take Some Rest!';
}
// Output
Fever(97): "Take Some Rest!" 
Fever(100): "Visit Doctor!"

 

9. 与传统的once相比,for循环更快。

for 和 for...in 默认会得到索引,但你可以使用 arr[index]。

for...in也接受非数字,所以要避免它。

forEach,for...of可以直接得到元素。

forEach也可以得到索引,但for...of不能。

 

10. 合并两个对象

在日常工作中,我们经常需要合并多个对象。

const user = { 
 name: 'Kapil Raghuwanshi', 
 gender: 'Male' 
 };
const college = { 
 primary: 'Mani Primary School', 
 secondary: 'Lass Secondary School' 
 };
const skills = { 
 programming: 'Extreme', 
 swimming: 'Average', 
 sleeping: 'Pro' 
 };
const summary = {...user, ...college, ...skills};
// Output 
gender: "Male"
name: "Kapil Raghuwanshi"
primary: "Mani Primary School"
programming: "Extreme"
secondary: "Lass Secondary School"
sleeping: "Pro"
swimming: "Average"

 

11. 箭头函数

箭头函数表达式是传统函数表达式的一个紧凑的替代方案,但它有局限性,不能在所有情况下使用。因为它们有词法范围(parental scope),没有自己的this和arguments,因此它们指的是它们被定义的环境。

const person = {
name: 'Kapil',
sayName() {
    return this.name;
    }
}
person.sayName();
// Output
"Kapil"

箭头函数改写为:

const person = {
name: 'Kapil',
sayName() {
    return this.name;
    }
}
person.sayName();
// Output
"Kapil"

 

12. 可选链式

如果在?之前的值是未定义的或空的,可选链式?就会停止评估,并返回未定义。

const user = {
  employee: {
    name: "Kapil"
  }
};
user.employee?.name;
// Output: "Kapil"
user.employ?.name;
// Output: undefined
user.employ.name
// Output: VM21616:1 Uncaught TypeError: Cannot read property 'name' of undefined

 

13. 打乱一个数组

使用内置的Math.random()方法。

const list = [1, 2, 3, 4, 5, 6, 7, 8, 9];
list.sort(() => {
    return Math.random() - 0.5;
});
// Output
(9) [2, 5, 1, 6, 9, 8, 4, 3, 7]
// Call it again
(9) [4, 1, 7, 5, 3, 8, 2, 9, 6]

 

14. 空值合并运算符

空值合并运算符(??)是一个逻辑运算符,当其左侧的操作数为空或未定义时,返回其右侧的操作数,否则返回其左侧的操作数。

const foo = null ?? 'my school';
// Output: "my school"
const baz = 0 ?? 42;
// Output: 0

 

 

15. Rest & Spread 运算符

那些神秘的3个点...可以Rest或Spread!

function myFun(a,  b, ...manyMoreArgs) {
   return arguments.length;
}
myFun("one", "two", "three", "four", "five", "six");
// Output: 6

const parts = ['shoulders', 'knees']; 
const lyrics = ['head', ...parts, 'and', 'toes']; 
lyrics;
// Output: 
(5) ["head", "shoulders", "knees", "and", "toes"]

 

16. 缺省参数

const search = (arr, low=0,high=arr.length-1) => {
    return high;
}
search([1,2,3,4,5]);
// Output: 4

 

17. 将十进制转换为二进制或十六进制

我们可以使用一些内置的方法,如.toPrecision()或.toFixed()来帮助实现此类问题。

num.toString(2);
// Output: "1010"
num.toString(16);
// Output: "a"
num.toString(8);
// Output: "12"

 

18. 使用解构简单交换2个值

let a = 5;
let b = 8;
[a,b] = [b,a]
[a,b]
// Output
(2) [8, 5]

 

19. 单行回文检查

function checkPalindrome(str) {
  return str == str.split('').reverse().join('');
}
checkPalindrome('naman');
// Output: true

 

20. 将对象的属性变成一个数组的属性

使用Object. entries(),Object.key()和Object.values()。

const obj = { a: 1, b: 2, c: 3 };
Object.entries(obj);
// Output
(3) [Array(2), Array(2), Array(2)]
0: (2) ["a", 1]
1: (2) ["b", 2]
2: (2) ["c", 3]
length: 3
Object.keys(obj);
(3) ["a", "b", "c"]
Object.values(obj);
(3) [1, 2, 3]

 

总结

我整理的就这些了,希望大家可以关注三水点靠木其他文章!

Javascript 相关文章推荐
JavaScript 对象模型 执行模型
Oct 15 Javascript
Javascript判断对象是否相等实现代码
Mar 18 Javascript
jquery获取复选框被选中的值
Apr 10 Javascript
jquery实现图片按比例缩放示例
Jul 01 Javascript
Node.js中的模块机制学习笔记
Nov 04 Javascript
JS中完美兼容各大浏览器的scrolltop方法
Apr 17 Javascript
jQuery插件kinMaxShow扩展效果用法实例
May 04 Javascript
js实现的彩色方块飞舞奇幻效果
Jan 27 Javascript
基于jquery二维码生成插件qrcode
Jan 07 Javascript
socket.io实现在线群聊功能
Apr 07 Javascript
JavaScript的Set数据结构详解
Feb 18 Javascript
使用Cargo工具高效创建Rust项目
Aug 14 Javascript
JavaScript实现贪吃蛇游戏
Vue过滤器(filter)实现及应用场景详解
GitHub上77.9K的Axios项目有哪些值得借鉴的地方详析
Axios取消重复请求的方法实例详解
使用JS实现简易计算器
微信小程序实现聊天室功能
小程序实现文字循环滚动动画
You might like
VOLVO车载收音机
2021/03/02 无线电
PHP下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
2011/09/19 PHP
深入理解PHP中的count函数
2016/05/31 PHP
YII2 实现多语言配置的方法分享
2017/01/11 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
2017/08/03 PHP
javascript学习笔记(二十) 获得和设置元素的特性(属性)
2012/06/20 Javascript
浮动的div自适应居中显示的js代码
2013/12/23 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
jQuery中mouseover事件用法实例
2014/12/26 Javascript
Nodejs学习笔记之入门篇
2015/04/16 NodeJs
原生js实现模拟滚动条
2015/06/15 Javascript
全面了解javascript三元运算符
2016/06/27 Javascript
jQuery中$.ajax()方法参数解析
2016/10/22 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
2016/12/19 Javascript
浅谈ES6新增的数组方法和对象
2017/08/08 Javascript
React 高阶组件入门介绍
2018/01/11 Javascript
原生js调用json方法总结
2018/02/22 Javascript
vue router 配置路由的方法
2018/07/26 Javascript
以一个投票程序的实例来讲解Python的Django框架使用
2016/02/18 Python
python实现根据文件关键字进行切分为多个文件的示例
2018/12/10 Python
Python实现计算字符串中出现次数最多的字符示例
2019/01/21 Python
python面向对象法实现图书管理系统
2019/04/19 Python
使用Python中的reduce()函数求积的实例
2019/06/28 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
2020/02/27 Python
使用keras时input_shape的维度表示问题说明
2020/06/29 Python
Python 在 VSCode 中使用 IPython Kernel 的方法详解
2020/09/05 Python
你可能不熟练的十个前端HTML5经典面试题
2018/07/03 HTML / CSS
美国时尚孕妇装品牌:A Pea in the Pod
2017/07/16 全球购物
集体婚礼证婚词
2014/01/13 职场文书
优秀学生事迹材料
2014/02/08 职场文书
挂靠协议书范本
2014/04/22 职场文书
借款担保书范文
2014/05/13 职场文书
党的群众路线教育实践活动个人对照检查材料(医生)
2014/11/05 职场文书
2015年基层党建工作总结
2015/05/14 职场文书
公司晚宴祝酒词
2015/08/11 职场文书
Python使用OpenCV实现虚拟缩放效果
2022/02/28 Python