对于 JavaScript 初学者而言,通常用大量 for 循环等传统的方式编码,对高效的编码方式或许不太熟悉。本文尝试使用一行编码方式来完成编码任务,希望对初学者有所帮助。
1. 数组中元素求和
传统的写法,使用变量承接每次的累加值
let numbers = [1, 2, 3, 4, 5];
let sum = 0;
for (let i = 0; i < numbers.length; i++) {
sum += numbers[i];
}
点击 reduce 查看 MDN 对于 reduce 的介绍。
let numbers = [1, 2, 3, 4, 5];
let sum = numbers.reduce((acc, num) => acc + num, 0);
2. 数组中元素去重
传统的写法,使用额外数组容纳新增元素
let numbers = [1, 2, 2, 3, 4, 4, 5];
let uniqueNumbers = [];
for (let i = 0; i < numbers.length; i++) {
if (!uniqueNumbers.includes(numbers[i])) {
uniqueNumbers.push(numbers[i]);
}
}
利用 Set 键不重复特性
let numbers = [1, 2, 2, 3, 4, 4, 5];
let uniqueNumbers = [...new Set(numbers)];
3. 两个变量交换值
传统的写法,使用额外变量进行中转替换
let a = 10;
let b = 20;
let temp = a;
a = b;
b = temp;
利用数组的解构
[b, a] = [a, b]
4. 字符串取反
传统的写法,额外变量承接,将原字符串倒序添加
let str = 'hellojuejin';
let reversedStr = '';
for (let i = str.length - 1; i >= 0; i--) {
reversedStr += str[i];
}
分裂(解构)--> 取反 --> 拼接
let str = 'hellojuejin';
let reversedStr = str.split('').reverse().join('');
// or
let reversedStr = [...str].reverse().join('');
5. 数组中元素计数
let numbers = [1, 2, 2, 3, 4, 4, 5];
let count = {};
for (let i = 0; i < numbers.length; i++) {
if (count[numbers[i]]) {
count[numbers[i]]++;
} else {
count[numbers[i]] = 1;
}
}
替换成 reduce 写法
let numbers = [1, 2, 2, 3, 4, 4, 5];
let count = numbers.reduce((acc, num) => {
acc[num] = (acc[num] || 0) + 1;
return acc;
}, {});
6. 判断对象中是否包含特定键(key)
let personalInfo = { name: 'mingo', age: 26 };
let hasKey = false;
for (let key in personalInfo) {
if (key === 'age') {
hasKey = true;
break;
}
}
let personalInfo = { name: 'mingo', age: 26 };
let hasKey = 'age' in personalInfo;
7. 取两个数组的交集
let array1 = [1, 2, 3, 4];
let array2 = [3, 4, 5, 6];
let intersection = [];
for (let i = 0; i < array1.length; i++) {
for (let j = 0; j < array2.length; j++) {
if (array1[i] === array2[j]) {
intersection.push(array1[i]);
break;
}
}
}
filter 和 includes 组合写法,过滤出 array1 在 array2 中的元素
let array1 = [1, 2, 3, 4];
let array2 = [3, 4, 5, 6];
let intersection = array1.filter(value => array2.includes(value));