JavaScript 更高效可读的一行代码

26 阅读2分钟

对于 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));