每天学习10个实用Javascript代码片段(四)

每天学习10个实用Javascript代码片段,加深对 Javascript 语法的理解,积累代码优化经验,第天继续,希望能够给你项目开发带来帮助。

1. intersection

此代码片段用于返回两个数组的交集,之前在文章《JavaScript中的Set数据操作:交集、差集、交集、对称差集》中介绍过使用 Set 获取两个集合的交集。

const intersection = (arrayA, arrayB) =>
    arrayA.filter((item) => arrayB.includes(item));
const array1 = [1, 2, 3, 4];
const array2 = [3, 4, 5, 6];

console.log(intersection(array1, array2)); // [ 3, 4 ]

2. sum

此代码片段用于计算数组各元素的总和。

const sum = (...array) => [...array].reduce((acc, current) => acc + current, 0);

const testArray = [1, 2, 3, 4, 5];
console.log(sum(1, 2, 3, 4, 5)); // 15
console.log(sum(...testArray)); // 15

3. timeTaken

此代码片段用于计算执行函数所需的时间。

const timeTaken = (callback) => {
    console.time("执行时间:");
    const result = callback();
    console.timeEnd("执行时间:");
    return result;
};

timeTaken(() => Math.pow(10, 20)); // 执行时间:: 0.094ms

4. average

此代码片段使用扩展运算符 (...) 和数组中的 reduce 方法来返回两个给定数字或数组的平均值。

const average = (...numbers) =>
    numbers.reduce((acc, current) => acc + current, 0) / numbers.length;

const testArray1 = [1, 2, 3, 4, 5];
console.log(average(...testArray1)); // 3
console.log(average(1, 2, 3, 4, 5)); // 3

5. powersetArray

此代码片段返回一个数字数组的幂集,使用 reducemapconcat 方法实现数组的组合方式。

const powersetArray = (array) =>
    array.reduce(
        (acc, current) => acc.concat(acc.map((item) => [current].concat(item))),
        [[]]
    );
console.log(powersetArray([3, 4, 5]));
console.log(powersetArray([1, 2]));
/*
[
  [],       [ 3 ],
  [ 4 ],    [ 4, 3 ],
  [ 5 ],    [ 5, 3 ],
  [ 5, 4 ], [ 5, 4, 3 ]
]
[ [], [ 1 ], [ 2 ], [ 2, 1 ] ]
*/

6. topElements

此代码片段按照从大到小返回数组的 top 个元素,使用扩展操作符()和数组的 sortslice 方法。如果不提供第二个参数,number的默认值为1,默认只返回一个最大元素。

const topElements = (array, count = 1) =>
    [...array].sort((a, b) => b - a).slice(0, count);

console.log(topElements([1, 2, 3, 4, 5, 6])); // [ 6 ]
console.log(topElements([1, 2, 30, 40, 30], 3)); // [ 40, 30, 30 ]

7. keyValuePairs

此代码片段使用 Object.keys 方法和 map 方法来映射 Object 的键,创建一个键值对数组。

const keyValuePairs = (object) =>
    Object.keys(object).map((key) => [key, object[key]]);

console.log(keyValuePairs({ title: "DevPoint", city: "Shenzhen" })); // [ [ 'title', 'DevPoint' ], [ 'city', 'Shenzhen' ] ]

8. isPowerOf2

此代码片段判断一个数是否为 2 的幂次方,使用按位运算符 &

const isPowerOf2 = (number) => !!number && (number & (number - 1)) === 0;

console.log(isPowerOf2(100)); // false
console.log(isPowerOf2(64)); // true

9. bottomVisible

此代码片段检查页面底部是否可见。

const bottomVisible = () =>
    document.documentElement.clientHeight + window.scrollY >=
    (document.documentElement.scrollHeight ||
        document.documentElement.clientHeight);

bottomVisible(); // true

10. createDir

此代码片段使用existsSync() 来检查目录是否存在,如果不存在则使用 mkdirSync() 创建它。主要用于NodeJs后端编程。

const fs = require("fs");
const createDir = (dir) =>
    !fs.existsSync(dir) ? fs.mkdirSync(dir) : undefined;
createDir("cache");