16个实用JavaScript代码片段:DOM、Cookie、数组、对象

简介: 在 JavaScript 的世界里,简洁的代码 == 更好,本文将通过项目开发设计的知识点整理一些可能涉及的 16 个JavaScript代码片段。

在 JavaScript 的世界里,简洁的代码 == 更好,本文将通过项目开发设计的知识点整理一些可能涉及的 16 个JavaScript代码片段。

DOM

DOM,即文档对象模型,是前端开发必须要掌握的基础之一,将 web 页面与到脚本或编程语言连接起来,通常是指  JavaScript,但将 HTML、SVG 或 XML 文档建模为对象并不是 JavaScript 语言的一部分。

元素是否被聚焦

const hasFocus = (ele) => ele === document.activeElement;

获取元素所有兄弟

const elemSiblings = (ele) =>  [].slice.call(ele.parentNode.children).filter((child) => child !== ele);

获取选定文本

const getSelectedText = () => window.getSelection().toString();

返回上一页

history.back();
// 或者
history.go(-1);

如果页面存在数据刷新,如新增完数据返回上一页并需要更新数据就不可以使用上述代码。

cookie

HTTP Cookie(也叫 Web Cookie 或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。是WEB项目开发需要涉及的内容。

设置 cookie

const setCookie = (name, value, options = { days: 30, path: "/" }) => {
    const exp = new Date();
    const strExpires = exp
        .setTime(exp.getTime() + options.days * 24 * 60 * 60 * 1000)
        .toGMTString();
    const cValue = escape(value);
    document.cookie = `${name}=${cValue};expires=${strExpires};path=${options.path}}`;
};

获取 cookie

const getCookie = (name) => {
    let arr;
    const reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
    if ((arr = document.cookie.match(reg))) {
        return unescape(arr[2]);
    } else {
        return null;
    }
};

清除所有 cookie

const clearCookies = () =>
    document.cookie
        .split(";")
        .forEach(
            (cookie) =>
                (document.cookie = cookie
                    .replace(/^ +/, "")
                    .replace(
                        /=.*/,
                        `=;expires=${new Date().toUTCString()};path=/`
                    ))
        );

将 cookie 值转为对象

const getCookiesToObject = () => document.cookie
    .split(";")
    .map((item) => item.split("="))
    .reduce((acc, [k, v]) => (acc[k.trim().replace('"', "")] = v) && acc, {});

执行上述方法获取的 cookie 值如下:

{
    "_ga": "GA1.2.819625059.1595074",
    "UM_distinctid": "17ad89255d847c-0555b2aae93c4-35637203-4b9600-17ad892",
    "NTES_P_UTID": "V49vEqFIeNsfT42uWYetvS3MW|1627641003",
    "CNZZDATA5664324": "cnzz_eid%3D298304137-1627126536-https%253A%252F%25",
    "CNZZDATA1257114097": "1974355"
}

数组

JavaScript 中常用的数组方法大概是 10 个左右,方法的使用可以参阅《JavaScript 数组操作必须熟练运用的 10 个方法》。

数组比较

const isEqual = (a, b) => JSON.stringify(a) === JSON.stringify(b);
// 或者
const isEqual = (a, b) =>
    a.length === b.length && a.every((v, i) => v === b[i]);
// 实例
console.log(isEqual([5, 3], [5, 3])); // true
console.log(isEqual([5, 3], [5, "3"])); // false
console.log(isEqual([5, 3], [3, 5])); // false

对象数组转对象

const toObject = (arr, key) =>
    arr.reduce((acc, current) => ({ ...acc, [current[key]]: current }), {});
或者;
const toObject = (arr, key) =>
    Object.fromEntries(arr.map((it) => [it[key], it]));
const arrayTest = [
    {
        id: 1,
        title: "数组方法for",
    },
    {
        id: 2,
        title: "数组方法forEach",
    },
];
console.log(toObject(arrayTest, "id"));
/*
{
  '1': { id: 1, title: '数组方法for' },
  '2': { id: 2, title: '数组方法forEach' }
}
*/

对象数组按照属性值计数

const countBy = (arr, prop) =>
    arr.reduce(
        (prev, curr) => ((prev[curr[prop]] = ++prev[curr[prop]] || 1), prev),
        {}
    );
// 实例
const arrayTest = [
    { branch: "huawei", model: "p30" },
    { branch: "huawei", model: "nova 8" },
    { branch: "xiaomi", model: "Redmi 9A" },
    { branch: "xiaomi", model: "Redmi Note 9" },
    { branch: "oppo", model: "Reno6" },
];
console.log(countBy(arrayTest, "branch"));
// { huawei: 2, xiaomi: 2, oppo: 1 }

检查数组是否为空

const isNotEmpty = (arr) => Array.isArray(arr) && Object.keys(arr).length > 0;
// 实例
console.log(isNotEmpty([])); // false
console.log(isNotEmpty([1, 3])); // true

对象

对象在JavaScript中是一种非常重要的数据类型,它们有很多有用的方法,在平常项目开发中可以使用这些方法容易地处理对象。关于对象推荐阅读《JavaScript 中优雅处理对象的6个方法》和《JavaScript对象创建模式》。

对象是否相等

const isEqual = (...objects) =>
    objects.every((obj) => JSON.stringify(obj) === JSON.stringify(objects[0]));
// 实例
console.log(isEqual({ title: "js", desc: "js" }, { desc: "js", title: "js" })); // false
console.log(isEqual({ title: "js", desc: "js" }, { title: "js", desc: "js" })); // true

从对象数组中提取属性值

const pluck = (objs, property) => objs.map((obj) => obj[property]);
// 实例
const arrayTest = [
    {
        title: "for",
    },
    {
        title: "forEach",
    },
    {
        title: "for...of",
    },
];
console.log(pluck(arrayTest, "title")); // [ 'for', 'forEach', 'for...of' ]

从对象中删除所有空和未定义的属性

const removeNullUndefined = (obj) =>
    Object.entries(obj).reduce(
        (acc, [k, v]) => (v == null ? acc : ((acc[k] = v), acc)),
        {}
    );
// 或者
const removeNullUndefined = (obj) =>
    Object.entries(obj)
        .filter(([_, v]) => v != null)
        .reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {});
const testObj = {
    title: "js",
    desc: null,
    view: undefined,
};
console.log(removeNullUndefined(testObj)); // {title:'js'}

对象是否为空

const isEmpty = (obj) => Object.keys(obj).length === 0;
console.log(isEmpty({})); // true
console.log(isEmpty({ title: "js" })); // false


相关文章
|
6天前
|
JavaScript 前端开发
如何在 JavaScript 中使用 __proto__ 实现对象的继承?
使用`__proto__`实现对象继承时需要注意原型链的完整性和属性方法的正确继承,避免出现意外的行为和错误。同时,在现代JavaScript中,也可以使用`class`和`extends`关键字来实现更简洁和直观的继承语法,但理解基于`__proto__`的继承方式对于深入理解JavaScript的面向对象编程和原型链机制仍然具有重要意义。
|
10天前
|
Web App开发 JavaScript 前端开发
如何确保 Math 对象的方法在不同的 JavaScript 环境中具有一致的精度?
【10月更文挑战第29天】通过遵循标准和最佳实践、采用固定精度计算、进行全面的测试与验证、避免隐式类型转换以及持续关注和更新等方法,可以在很大程度上确保Math对象的方法在不同的JavaScript环境中具有一致的精度,从而提高代码的可靠性和可移植性。
|
10天前
|
JavaScript 前端开发 图形学
JavaScript 中 Math 对象常用方法
【10月更文挑战第29天】JavaScript中的Math对象提供了丰富多样的数学方法,涵盖了基本数学运算、幂运算、开方、随机数生成、极值获取以及三角函数等多个方面,为各种数学相关的计算和处理提供了强大的支持,是JavaScript编程中不可或缺的一部分。
|
20天前
|
XML 编解码 JavaScript
DOM(文档对象模型)和 BOM(浏览器对象模型)
【10月更文挑战第19天】在前端开发中,理解 DOM(文档对象模型)和 BOM(浏览器对象模型)是至关重要的。它们是 Web 开发的基础,为我们提供了与网页文档和浏览器进行交互的能力。
|
29天前
|
自然语言处理 前端开发 JavaScript
🛠️ JavaScript数组操作指南:20个精通必备技巧🚀
本文详细介绍了 JavaScript 中的 20 个高效数组操作技巧,涵盖了从基本的添加、移除元素,到数组转换和去重等高级操作。强调了不可变性的重要性,提供了清晰的代码示例,帮助开发者编写更整洁和高效的代码。无论是新手还是经验丰富的开发者,这些技巧都将显著提升您的编码能力,使您在项目中更具竞争力。
20 2
|
1月前
|
JavaScript 前端开发 测试技术
JS都有哪些操作数组的方法
JS都有哪些操作数组的方法
20 3
|
1月前
|
缓存 JavaScript 前端开发
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
31 1
|
1月前
|
存储 JavaScript 前端开发
js中函数、方法、对象的区别
js中函数、方法、对象的区别
16 2
|
28天前
|
JavaScript 前端开发 大数据
在JavaScript中,Object.assign()方法或展开语法(...)来合并对象,Object.freeze()方法来冻结对象,防止对象被修改
在JavaScript中,Object.assign()方法或展开语法(...)来合并对象,Object.freeze()方法来冻结对象,防止对象被修改
15 0
|
1月前
|
JavaScript 前端开发 API
JS中数组的方法flat()怎么用
JS中数组的方法flat()怎么用
13 0