17个JavaScript 单行程序

目录
  • 一、DOM & BOM 相关
    • 1、检查元素是否获得焦点
    • 2、获取元素的所有兄弟节点
    • 3、获取选定的文本
    • 4、返回上一个页面
    • 5、清除所有 cookie
    • 6、将 cookie 转换为对象
  • 二、数组相关
    • 7、比较两个数组
    • 8、将对象数组转换为对象
    • 9、按对象数组的属性计数
    • 10、检查数组是否为空
  • 三、对象相关
    • 11、检查多个对象是否相等
    • 12、从对象数组中提取属性的值
    • 13、反转对象的键和值
    • 14、从对象中删除所有空和未定义的属性
    • 15、按属性对对象进行排序
    • 16、检查一个对象是否是一个 Promise
    • 17、检查对象是否为数组

一、DOM & BOM 相关

1、检查元素是否获得焦点

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

2、获取元素的所有兄弟节点

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

// 或者
const siblings = (ele) => [...ele.parentNode.children].filter((child) => child !== ele);

3、获取选定的文本

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

4、返回上一个页面

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

5、清除所有 cookie

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

6、将 cookie 转换为对象

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

二、数组相关

7、比较两个数组

// `a` 和 `b` 是一个数组
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]);

// 示例
isEqual([1, 2, 3], [1, 2, 3]); // true
isEqual([1, 2, 3], [1, '2', 3]); // false

8、将对象数组转换为对象

const toObject = (arr, key) => arr.reduce((a, b) => ({ ...a, [b[key]]: b }), {});
// 或者
const toObject = (arr, key) => Object.fromEntries(arr.map((it) => [it[key], it]));

// 示例
toObject([
  { id: '1', name: 'Alpha', gender: 'Male' },
  { id: '2', name: 'Bravo', gender: 'Male' },
  { id: '3', name: 'Charlie', gender: 'Female' }],
'id');

/*
{
'1': { id: '1', name: 'Alpha', gender: 'Male' },
'2': { id: '2', name: 'Bravo', gender: 'Male' },
'3': { id: '3', name: 'Charlie', gender: 'Female' }
}
*/

9、按对象数组的属性计数

const countBy = (arr, prop) => arr.reduce((prev, curr) => ((prev[curr[prop]] = ++prev[curr[prop]] || 1), prev), {});

// 示例
countBy([
{ branch: 'audi', model: 'q8', year: '2019' },
{ branch: 'audi', model: 'rs7', year: '2020' },
{ branch: 'ford', model: 'mustang', year: '2019' },
{ branch: 'ford', model: 'explorer', year: '2020' },
{ branch: 'bmw', model: 'x7', year: '2020' },
],
'branch');

// { 'audi': 2, 'ford': 2, 'bmw': 1 }

10、检查数组是否为空

const isNotEmpty = (arr) => Array.isArray(arr) && Object.keys(arr).length > 0;

// 示例
isNotEmpty([]); // false
isNotEmpty([1, 2, 3]); // true

三、对象相关

11、检查多个对象是否相等

const isEqual = (...objects) => objects.every((obj) => JSON.stringify(obj) === JSON.stringify(objects[0]));

// 示例
isEqual({ foo: 'bar' }, { foo: 'bar' }); // true
isEqual({ foo: 'bar' }, { bar: 'foo' }); // false

12、从对象数组中提取属性的值

const pluck = (objs, property) => objs.map((obj) => obj[property]);

// 示例
pluck([
  { name: 'John', age: 20 },
  { name: 'Smith', age: 25 },
  { name: 'Peter', age: 30 },
],
'name');

// ['John', 'Smith', 'Peter']

13、反转对象的键和值

const invert = (obj) => Object.keys(obj).reduce((res, k) => Object.assign(res, { [obj[k]]: k }), {});
// 或者
const invert = (obj) => Object.fromEntries(Object.entries(obj).map(([k, v]) => [v, k]));

// 示例
invert({ a: '1', b: '2', c: '3' }); // { 1: 'a', 2: 'b', 3: 'c' }

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

const removeNullUndefined = (obj) =>
  Object.entries(obj).reduce(
    (a, [k, v]) => (v == null ? a : ((a[k] = v), a)),
    {},
  );

// 或者
const removeNullUndefined = (obj) =>
  Object.entries(obj)
    .filter(([_, v]) => v != null)
    .reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {});

// 或者
const removeNullUndefined = (obj) =>
  Object.fromEntries(Object.entries(obj).filter(([_, v]) => v != null));

// 示例
removeNullUndefined({
  foo: null,
  bar: undefined,
  fuzz: 42
});
// { fuzz: 42 }

15、按属性对对象进行排序

const sort = (obj) =>
  Object.keys(obj)
    .sort()
    .reduce((p, c) => ((p[c] = obj[c]), p), {});

// 示例
const colors = {
  white: '#ffffff',
  black: '#000000',
  red: '#ff0000',
  green: '#008000',
  blue: '#0000ff',
};
sort(colors);
/*
{
  black: '#000000',
  blue: '#0000ff',
  green: '#008000',
  red: '#ff0000',
  white: '#ffffff',
}
*/

16、检查一个对象是否是一个 Promise

const isPromise = (obj) =>
  !!obj &&
  (typeof obj === 'object' || typeof obj === 'function') &&
  typeof obj.then === 'function';

17、检查对象是否为数组

const isArray = (obj) => Array.isArray(obj);

到此这篇关于JavaScript 单行程序 的文章就介绍到这了,更多相关JavaScript 单行程序 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 开发中常用的25个JavaScript单行代码(小结)

    1.强制布尔值 要将变量强制转换为布尔值而不更改其值: const myBoolean = !! myVariable; !!null // false !!undefined // false !!false // false !!ture // ture !!"" // false !!"string" // true !!0 // false !!1 // true !!{} // true !![] // true 2.基于某个条件为对象设置属性 要使用sp

  • 单行 JS 实现移动端金钱格式的输入规则

    金钱格式检验属于很普通的需求,记得工作中第一次遇到这个需求的时候,还不太会写正则表达式,搜到了一个类似的解决方案,看着正则的文档改成了自己需要的形式. 但是用户的输入操作是任意的,只是显示提示信息,这种方式虽然可以满足要求,但是感觉不友好. 其实移动端的很多应用在输入金钱时都是屏蔽错误输入,只能输入正确的格式.先看一看金钱格式的输入规则有哪些: 1. 不能输入空白字符及字母 2. 只能输入数字及小数点 3. 首位不能为小数点 4. 小数点只能出现一次 5. 小数点后只有两位 6. 不能输入首位是

  • 分享十八个杀手级JavaScript单行代码

    前言 JavaScript不断发展壮大,因为它是最容易上手的语言之一,因此为市场上的新成为技术怪才打开了大门. 而且,无论你是JavaScript的新手还是更多的专业开发人员,学习新知识总是一件好事. 本文整理了一些非常有用的单行代码,这些单行代码可以帮助你提高工作效率. 什么是单行代码? 单行代码是一种代码实践,其中我们仅用一行代码执行某些功能. 单行代码实例 1.复制到剪贴板 使用 navigator.clipboard.writeText 轻松将任何文本复制到剪贴板. const copy

  • 17个JavaScript 单行程序

    目录 一.DOM & BOM 相关 1.检查元素是否获得焦点 2.获取元素的所有兄弟节点 3.获取选定的文本 4.返回上一个页面 5.清除所有 cookie 6.将 cookie 转换为对象 二.数组相关 7.比较两个数组 8.将对象数组转换为对象 9.按对象数组的属性计数 10.检查数组是否为空 三.对象相关 11.检查多个对象是否相等 12.从对象数组中提取属性的值 13.反转对象的键和值 14.从对象中删除所有空和未定义的属性 15.按属性对对象进行排序 16.检查一个对象是否是一个 Pr

  • 13个JavaScript 一行程序,让你看起来就是个专家

    目录 1. 获得一个随机的布尔值(true/false) 该函数使用Math.random()方法返回一个布尔值(true 或者 false).Math.random创建一个0到1之间的随机数,我们只要检查它是否高于或低于0.5,就有50%机会得到true或false. const randomBoolean = () => Math.random() >= 0.5; console.log(randomBoolean()); 2. 检查所提供的日期是否为工作日 使用这种方法,我们能够检查在函

  • 分享20个JavaScript 单行代码

    目录 1.获取浏览器Cookie的值 2.将RGB转换为十六进制 3.复制到剪贴板 4.检查日期是否有效 5.查找一年中的某一天 6.大写字符串 7.查找两个日期之间的天数 8.清除所有Cookie 9.生成随机十六进制 10.从数组中删除重复项 11.从URL获取查询参数 12.从日期输出时间 13.检查数字是偶数还是奇数 14.求数字的平均值 15.滚动到顶部 16.反转字符串 17.检查数组是否为空 18.获取选定的文本 19.打乱数组 20.检测暗模式 1.获取浏览器Cookie的值 通

  • 13个JavaScript 一行程序,让你看起来就是个专家

    目录 1. 获得一个随机的布尔值(true/false) 2. 检查所提供的日期是否为工作日 3.反转字符串 4.检查当前标签是否隐藏 5. 检查一个数字是偶数还是奇数 6. 从一个日期获取时间 7. 保留 n 位小数 8. 检查当前是否有元素处于焦点中 9. 检查当前浏览器是否支持触摸事件 10. 检查当前浏览器是否在苹果设备上 11. 滚动到页面顶部 12. 获取参数的平均数值 13.华氏/摄氏转换 1. 获得一个随机的布尔值(true/false) 该函数使用Math.random()方法

  • 分享50个超级有用的JavaScript单行代码(推荐!)

    目录 前言 日期 字符串 工具 总结 前言 在这篇文章中,我列出了一个系列的50个 JavaScript 单行代码,它们在使用 vanilla js(≥ ES6)进行开发时非常有用.它们也是使用该语言在最新版本中为我们提供的所有功能来解决问题的优雅方式. 我将它们分为以下5大类: 日期 字符串 数字 数组 工具 事不宜迟,我马上开始的,我希望你发现他们对你有帮助! 日期 1. 日期是否正确(有效) 此方法用于检查给定日期是否有效 const isDateValid = (...val) => !

  • 大型JavaScript应用程序架构设计模式

    PDF版的PPT下载地址:http://www.slideshare.net/jibyjohnc/jqquerysummit-largescale-javascript-application-architecture 注:在整理的过程中,发现作者有些思想是返来复去地说,所以删减了一部分,如果你的英文良好,请直接阅读英文的PPT. 以下是本文的主要章节: 1. 什么叫"JavaScript大型程序"? 2. 顾当前的程序架构 3. 长远考虑 4. 头脑风暴 5. 建议的架构 5.1 设

  • javascript 单行文字向上跑马灯滚动显示

    代码如下: =sh/2) o.style.marginTop=0; }else{ clearInterval(t); setTimeout(start,delay); } } setTimeout(start,delay); } // --> 我们 服务器常用软件 百度 浏览器 [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

  • 深入理解JavaScript程序中内存泄漏

    垃圾回收解放了我们,它让我们可将精力集中在应用程序逻辑(而不是内存管理)上.但是,垃圾收集并不神奇.了解它的工作原理,以及如何使它保留本应在很久以前释放的内存,就可以实现更快更可靠的应用程序.在本文中,学习一种定位 JavaScript 应用程序中内存泄漏的系统方法.几种常见的泄漏模式,以及解决这些泄漏的适当方法. 一.简介 当处理 JavaScript 这样的脚本语言时,很容易忘记每个对象.类.字符串.数字和方法都需要分配和保留内存.语言和运行时的垃圾回收器隐藏了内存分配和释放的具体细节. 许

随机推荐