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

简介: 每天学习10个实用Javascript代码片段,加深对 Javascript 语法的理解,积累代码优化经验,今天是第二部分,当然看完后还能继续查看过完的代码片段《每天学习10个实用Javascript代码片段(一)》。

每天学习10个实用Javascript代码片段,加深对 Javascript 语法的理解,积累代码优化经验,今天是第二部分,当然看完后还能继续查看过完的代码片段《每天学习10个实用Javascript代码片段(一)》。

1. forObject

此代码片段遍历对象的每个属性,并分别为每个属性迭代一个回调。

const forObject = (obj, callback) =>
    Object.keys(obj).forEach((key) => callback(obj[key], key, obj));
const testObj = {
    title: "每天学习10个实用Javascript代码片段(一)",
    author: "天行无忌",
};
forObject(testObj, (val, key) => {
    console.log(`${key}:${val}`);
});
// title:每天学习10个实用Javascript代码片段(一)
// author:天行无忌

2. forReverse

此代码片段倒序遍历数组,即从数组的最后一个元素开始向前遍历数组的每个元素并执行一个回调函数。

const forReverse = (array, callback) =>
    array.slice(0).reverse().forEach(callback);
const testArray = [1, 2, 3, 4];
forReverse(testArray, (val) => console.log(val));
// 4
// 3
// 2
// 1

感谢掘友的友情提示reduceRight() 方法接受一个函数作为累加器(accumulator)和数组的每个值(从右到左)将其减少为单个值。但目前支持程度不够普及,使用的时候需要考虑环境是否支持

const testArray = [1, 2, 3, 4];
const forReduce = (array, callback) => {
    array.reduceRight((acc, current) => callback(current), 0);
};
forReduce(testArray, (val) => console.log(val));

3. flatten

此代码片段使用递归将数组展平到指定的深度,ES6中有现成的函数可以实现,在这里有介绍《7 个你应该掌握的 JavaScript 编码技巧》。

const flatten = (array, depth = 1) =>
    array.reduce(
        (acc, current) =>
            acc.concat(
                depth > 1 && Array.isArray(current)
                    ? flatten(current, depth - 1)
                    : current
            ),
        []
    );
const arrayTest = [0, 1, 2, [[[3, 4, [5]]]]];
console.log(flatten(arrayTest)); // [ 0, 1, 2, [ [ 3, 4, [Array] ] ] ]
console.log(arrayTest.flat()); // [ 0, 1, 2, [ [ 3, 4, [Array] ] ] ]
const depth = 3;
console.log(flatten(arrayTest, depth)); // [ 0, 1, 2, 3, 4, [ 5 ] ]
console.log(arrayTest.flat(depth)); // [ 0, 1, 2, 3, 4, [ 5 ] ]

4. deepFlatten

此代码片段使用递归将数组全部展平,和上面的函数相比,此函数无需指定深度,全部展平。

const deepFlatten = (array) =>
    [].concat(
        ...array.map((item) => (Array.isArray(item) ? deepFlatten(item) : item))
    );
const arrayTest = [0, 1, 2, [[[3, 4, [5]]]]];
console.log(deepFlatten(arrayTest)); // [ 0, 1, 2, 3, 4, 5 ]

5. findKey

此代码片段通过键值查找对象,返回满足给定函数的第一个 key

const findKey = (obj, fn) =>
    Object.keys(obj).find((key) => fn(obj[key], key, obj));
const testObj = {
    hballard: { age: 36 },
    sguzman: { age: 40 },
    plowe: { age: 32 },
};
console.log(findKey(testObj, (item) => item.age > 32)); // hballard

6. filterDuplicate

此代码片段过滤数组中的重复项,这是 Set 比较经典的使用场景。关于 Set  的使用可以参阅《JavaScript中的Set数据操作:交集、差集、交集、对称差集》。

const filterDuplicate = (arr) => [...new Set(arr)];
const testArray = [1, 3, 4, 5, 5, 5, 6, 2, 9];
console.log(filterDuplicate(testArray)); // [1, 3, 4, 5, 6, 2, 9]

7. dropWhile

此代码片段从数组中删除元素,直到传递的函数返回 true 。即从数组第一个元素开始删除,直到删除的元素满足函数返回 true 就停止。

const dropWhile = (array, fn) => {
    while (array.length > 0 && !fn(array[0])) array = array.slice(1);
    return array;
};
const testArray = [30, 29, 33, 31, 28];
console.log(dropWhile(testArray, (item) => item >= 33)); // [ 33, 31, 28 ]

8. digitize

此代码片段将数字拆分为单个数字组成的数组,这个是扩展运算符 ...  的比较经典的使用方法。更多扩展运算符的使用请参阅《ES6中扩展运算符的8种用法

const digitize = (number) => [...`${number}`].map((item) => parseInt(item));
console.log(digitize(2021)); // [ 2, 0, 2, 1 ]

9 .differenceWith

此代码片段删除了比较器函数返回为 false 的值,其实也可以用来求两个数组的差集。

const differenceWith = (array1, array2, comp) =>
    array1.filter((a) => array2.findIndex((b) => comp(a, b)) === -1);
const a1 = [1, 2, 3, 4];
const a2 = [3, 4, 5, 6];
console.log(differenceWith(a1, a2, (a, b) => a === b)); // [ 1, 2 ]

10. defer

此代码片段将延迟函数的执行,直到当前调用堆栈全部执行完毕。

const defer = (fn, ...args) => setTimeout(fn, 1, ...args);
defer(console.log, "devpoint");
console.log("juejin"); // 先 juejin 后 devpoint


相关文章
|
23天前
|
JavaScript
短小精悍的js代码
【10月更文挑战第17天】
119 58
|
11天前
|
JavaScript
原生js炫酷随机抽奖中奖效果代码
原生js随机抽奖是一个炫酷的根据数据随机抽奖的代码,该网页可进行随机抽取一个数据,页面动画高科技、炫酷感觉的随机抽奖效果,简单好用,欢迎下载!
24 3
原生js炫酷随机抽奖中奖效果代码
|
16天前
|
JavaScript 前端开发 开发者
如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码,包括安装插件、配置 ESLint 和 Prettier 以及 VSCode 设置的具体步骤
随着前端开发技术的快速发展,代码规范和格式化工具变得尤为重要。本文介绍了如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码,包括安装插件、配置 ESLint 和 Prettier 以及 VSCode 设置的具体步骤。通过这些工具,可以显著提升编码效率和代码质量。
163 4
|
17天前
|
JSON 移动开发 数据格式
html5+css3+js移动端带歌词音乐播放器代码
音乐播放器特效是一款html5+css3+js制作的手机移动端音乐播放器代码,带歌词显示。包括支持单曲循环,歌词显示,歌曲搜索,音量控制,列表循环等功能。利用json获取音乐歌单和歌词,基于html5 audio属性手机音乐播放器代码。
66 6
|
14天前
|
JavaScript 前端开发 开发者
如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码
随着前端开发技术的快速发展,代码规范和格式化工具变得尤为重要。本文介绍如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码。通过安装和配置这些工具,可以确保代码风格一致,提高代码质量和可读性。
41 1
|
1月前
|
JavaScript 前端开发 开发者
如何在 VSCode 中使用 ESLint 和 Prettier 检查并自动格式化 Vue.js 代码,提升团队协作效率和代码质量。
【10月更文挑战第9天】随着前端开发技术的发展,代码规范和格式化工具变得至关重要。本文介绍如何在 VSCode 中使用 ESLint 和 Prettier 检查并自动格式化 Vue.js 代码,提升团队协作效率和代码质量。通过安装插件、配置 ESLint 和 Prettier,以及设置 VSCode,实现代码实时检查和格式化,确保代码风格一致。
26 2
|
1月前
|
JavaScript 前端开发 开发者
如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查并自动格式化 Vue.js 代码,提升代码质量和团队协作效率。
【10月更文挑战第8天】本文介绍了如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查并自动格式化 Vue.js 代码,提升代码质量和团队协作效率。通过安装 VSCode 插件、配置 ESLint 和 Prettier,实现代码规范检查和自动格式化,确保代码风格一致,提高可读性和维护性。
59 2
|
1月前
|
JavaScript
js学习--商品列表商品详情
js学习--商品列表商品详情
17 2
|
1月前
|
JavaScript
js学习--九宫格抽奖
js学习--九宫格抽奖
16 2