普通视图

发现新文章,点击刷新页面。
今天 — 2025年1月18日首页

JavaScript 数组方法大盘点:从新手到大佬,快速掌握所有必备技能!🎉

2025年1月17日 21:37

前言

大家好!今天我们将继续深入探索 JavaScript 数组的奥秘!你可能以为 pushpop 就是数组操作的全部,但其实数组的世界远不止如此。除了这些基础方法,还有许多其他方法能够让你的数组操作如鱼得水,大幅提高开发效率。今天的目标是帮助你从新手晋升为 JavaScript 数组高手,不仅掌握常用方法,还会揭秘一些鲜为人知的“宝藏”方法。让我们继续这段魔法般的数组之旅吧!🚀


相关方法

1. push()pop()

  • push():将一个或多个元素添加到数组末尾,并返回数组的新长度。
  • pop():从数组末尾删除一个元素,返回被删除的元素。
const fruits = ['apple', 'banana'];
fruits.push('orange'); // 添加橙子
console.log(fruits); // ['apple', 'banana', 'orange']

const lastFruit = fruits.pop(); // 删除最后一个元素
console.log(lastFruit); // 'orange'
console.log(fruits); // ['apple', 'banana']

2. shift()unshift()

  • shift():删除数组中的第一个元素,返回被删除的元素。
  • unshift():将一个或多个元素添加到数组的开头,返回数组的新长度。
const numbers = [1, 2, 3, 4];
numbers.unshift(0); // 在数组开头添加 0
console.log(numbers); // [0, 1, 2, 3, 4]

const firstNumber = numbers.shift(); // 删除第一个元素
console.log(firstNumber); // 0
console.log(numbers); // [1, 2, 3, 4]

3. map()

  • map():创建一个新数组,数组中的每个元素是原数组元素调用指定函数处理后的结果。
let numbers = [1, 2, 3, 4];
let squared = numbers.map((num) => num ** 2); // 数组中每个数字平方
console.log(squared); // [1, 4, 9, 16]

4. filter()

  • filter():创建一个新数组,包含所有通过指定条件函数筛选出的元素,原数组不受影响。
let ages = [12, 18, 25, 30, 15];
let adults = ages.filter((age) => age >= 18); // 筛选出年龄大于等于 18 的人
console.log(adults); // [18, 25, 30]

5. reduce()

  • reduce():对数组中的每个元素执行指定的累加操作,最终返回单一结果(如求和、拼接等)。
let numbers = [1, 2, 3, 4];
let sum = numbers.reduce((acc, num) => acc + num, 0); // 数组求和
console.log(sum); // 10

6. forEach()

  • forEach():对数组的每个元素执行指定的回调函数,不返回结果,常用于遍历。
let colors = ['red', 'green', 'blue'];
colors.forEach(color => console.log(color));  // 打印每个颜色
// 输出:
// red
// green
// blue

7. find()findIndex()

  • find():返回第一个满足条件的元素,如果没有找到,则返回 undefined
  • findIndex():返回第一个满足条件的元素的索引,如果没有找到,则返回 -1。
let users = [{ name: 'Tom', age: 20 }, { name: 'Jerry', age: 25 }];
let user = users.find(user => user.name === 'Tom');  // 查找 Tom
console.log(user);  // { name: 'Tom', age: 20 }

let index = users.findIndex(user => user.name === 'Jerry');  // 查找 Jerry 的索引
console.log(index);  // 1

8. sort()

  • sort():对数组元素进行排序,默认按字符串字典序排列。如果要按数字大小排序,需要提供比较函数。
let nums = [4, 2, 8, 5];
nums.sort((a, b) => a - b);  // 数字升序排序
console.log(nums);  // [2, 4, 5, 8]

9. slice()splice()

  • slice():返回数组的一个新数组,包含指定起始和结束位置之间的元素,不会改变原数组。
  • splice():可以删除或插入数组中的元素,直接改变原数组。
let animals = ['dog', 'cat', 'rabbit', 'bird'];
let selectedAnimals = animals.slice(1, 3);  // 获取从索引 1 到 3 的元素
console.log(selectedAnimals);  // ['cat', 'rabbit']
console.log(animals);  // ['dog', 'cat', 'rabbit', 'bird']

animals.splice(2, 1, 'fish');  // 删除第 2 个元素,插入 'fish'
console.log(animals);  // ['dog', 'cat', 'fish', 'bird']

10. concat()

  • concat():合并两个或多个数组,返回一个新数组。
let array1 = [1, 2];
let array2 = [3, 4];
let combined = array1.concat(array2);  // 合并数组
console.log(combined);  // [1, 2, 3, 4]

11. join()

  • join():将数组中的所有元素连接成一个字符串,元素间可以指定分隔符。
let fruits = ['apple', 'banana', 'cherry'];
let fruitString = fruits.join(' & ');  // 用 '&' 连接数组元素
console.log(fruitString);  // 'apple & banana & cherry'

12. some()every()

  • some():只要有至少一个元素符合条件,返回 true,否则返回 false
  • every():只有所有元素都符合条件,返回 true,否则返回 false
let numbers = [10, 20, 30, 40];
let hasLargeNumber = numbers.some(num => num > 25);  // 判断是否有大于 25 的元素
console.log(hasLargeNumber);  // true

let allLargeNumbers = numbers.every(num => num > 5);  // 判断所有数字是否都大于 5
console.log(allLargeNumbers);  // true

13. from()

  • from():将类数组对象或可迭代对象转换为数组。
let str = 'hello';
let arr = Array.from(str);  // 将字符串转换为数组
console.log(arr);  // ['h', 'e', 'l', 'l', 'o']

14. fill()

  • fill():用指定的值填充数组的指定位置,填充的元素会改变原数组。
let numbers = [1, 2, 3, 4];
numbers.fill(0, 2, 4);  // 从索引 2 到 4 填充为 0
console.log(numbers);  // [1, 2, 0, 0]

15. includes()

  • includes():判断数组中是否包含某个特定的元素,返回布尔值。
let fruits = ['apple', 'banana', 'cherry'];
console.log(fruits.includes('banana'));  // true
console.log(fruits.includes('orange'));  // false

16. reverse()

  • reverse():将数组的元素反转,直接修改原数组。
let numbers = [1, 2, 3, 4];
numbers.reverse();  // 反转数组
console.log(numbers);  // [4, 3, 2, 1]

17. indexOf()lastIndexOf()

  • indexOf() :返回数组中首次出现指定元素的索引,若没有找到,返回 -1
  • lastIndexOf() :返回数组中最后一次出现指定元素的索引,若没有找到,返回 -1
let fruits = ['apple', 'banana', 'cherry', 'banana'];
console.log(fruits.indexOf('banana'));  // 1(返回第一个 banana 的索引)
console.log(fruits.lastIndexOf('banana'));  // 3(返回最后一个 banana 的索引)
console.log(fruits.indexOf('grape'));  // -1(未找到 grape)

18. Array.isArray()

  • Array.isArray():判断传入的值是否是一个数组,返回 truefalse
console.log(Array.isArray([1, 2, 3]));  // true
console.log(Array.isArray('hello'));  // false
console.log(Array.isArray({ name: 'Tom' }));  // false

总结

这些 JavaScript 数组方法就像是数组的超级英雄,掌握它们,你就能让数组操作事半功倍!从基础的增删查改到高级的 mapreduce,以及一些不常用但极具威力的方法如 fromfillincludes,都能帮助你在开发中大显身手。希望今天的分享能够让你在

数组的世界里游刃有余!如果你有其他的数组操作技巧,欢迎留言讨论!🔧

昨天以前首页

CSS 重置样式表:让你的页面从零开始

2025年1月16日 02:28

前言

在网页开发过程中,浏览器会自动应用一些默认的样式,这些样式虽然有助于快速显示内容,但它们在不同浏览器间可能存在差异,从而影响页面的布局和一致性。为了确保项目在各浏览器中有统一的展示效果,我们通常会使用 CSS 重置样式表(CSS Reset),清理这些默认样式,从而为我们的设计提供一个干净、统一的起点。

本文将介绍一份常见的 CSS 重置样式表,帮助你清理不必要的默认样式,并为你的项目构建一个一致的基础。

代码实现

/* 使用更直观的盒模型(box-sizing) */
*, *::before, *::after {
  font-family: inherit;
  box-sizing: border-box;
}

/* 取消默认的内外边距 margin 和 padding */
body, h1, h2, h3, h4, h5, h6, dl, dt, dd, ol, ul , li, p, fieldset, legend, header, footer, hgroup, menu, nav, section, figcaption, figure, mark, form,
time, td, th, label, hr, i, strong {
  margin: 0;
  padding: 0;
  font-style: normal;
  font-weight: normal;
  font-size: inherit;
}

/* 新布局元素兼容旧版本浏览器 */
article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {
  display: block;
}

/* 允许通过百分比设置应用的高度 */
html, body, #app {
  width: 100%;
  height: 100%;
  line-height: 1;
  -webkit-font-smoothing: antialiased; /* 优化文字渲染平滑度 */
}

/* 解决在移动端时,点击元素会出现阴影的问题 */
body {
  -webkit-tap-highlight-color: transparent;
}

/* 去除所有项目符号标识 */
li {
  list-style: none;
}

/* 去除超链接默认下划线 */
a {
  color: inherit;
  text-decoration: none;
}

/* 给超链接添加一个默认的 hover 颜色 */
a:hover {
  cursor: pointer;
}

/* 去除图片与容器底部的留白,使多媒体内容显示更合理 */
img, iframe, video, canvas {
  display: block;
  width: 100%;
  height: 100%;
}

/* 去除 input 标签的默认样式 */
button, input, textarea {
  margin: 0;
  padding: 0;
  border: 1px solid #dcdfe6;
  outline: none;
  font-size: inherit;
  background-color: transparent;
}

/* input placeholder 文字的样式 */
::-webkit-input-placeholder {
  color: #afbdcc;
}

/* 禁止文本域手动拖动大小 */
textarea {
  resize: none;
}

/* 解决 Chrome 浏览器默认黄色背景问题 */
input:-webkit-autofill, textarea:-webkit-autofill, select:-webkit-autofill {
  -webkit-box-shadow: 0 0 0 1000px #fff inset;
}

/* 自定义滚动条样式 */
::-webkit-scrollbar {
  width: 6px;
  height: 6px;
}

/* 滚动条轨道样式 */
::-webkit-scrollbar-track {
  background-color: #f5f5f5;
}

/* 滚动条滑块样式 */
::-webkit-scrollbar-thumb {
  border-radius: 6px;
  background-color: #ccc;
}
::-webkit-scrollbar-thumb:hover {
  background-color: #a8a8a8;
}
::-webkit-scrollbar-thumb:active {
  background-color: #787878;
}

/* 当垂直与水平滚动条同时存在时的交汇部分样式 */
::-webkit-scrollbar-corner {
  background-color: #f5f5f5;
}

/* 其他元素的 corner 部分样式(例如:textarea 可拖动按钮) */
::-webkit-resizer {
  background-repeat: no-repeat; 
  background-position: bottom right;
}

内容解析

1、盒模型(box-sizing)优化

默认情况下,元素的 widthheight 是基于 content-box 算的,这意味着 padding 和 border 会被加到元素的实际宽高上。通过使用 box-sizing: border-box,我们确保元素的宽高包括 padding 和 border,这样就能避免一些布局上的问题,使得开发时更直观,减少了因盒模型导致的布局错误。

2、清理默认的 margin 和 padding

不同浏览器会为许多元素自动添加 marginpadding,这可能导致页面布局不一致。通过重置这些默认值,我们为页面提供一个干净的起点,避免了不必要的空隙或布局冲突。

3、元素兼容性

HTML5 引入了一些新元素,如 article, section 等,这些元素在旧版浏览器中默认并没有设置为 block,导致它们不正常显示。通过显式地为这些元素设置 display: block,我们可以确保在所有浏览器中都能正确渲染。

4、字体优化和渲染平滑度

为了改善字体在不同设备和浏览器上的渲染效果,使用了 -webkit-font-smoothing: antialiased。这项优化可以提升字体的显示质量,尤其在高分辨率的屏幕上,显得更为明显。

5、移动端优化

在移动设备上,点击元素时浏览器会默认显示一个点击阴影效果。通过 -webkit-tap-highlight-color: transparent;,我们去除了这个阴影,使得用户在点击时的体验更加顺畅、清晰。

6、图片、视频和 iframe 展示优化

为了避免图片、视频、iframe 等元素在容器内展示时出现不必要的空白区域,我们设置了 display: blockwidth: 100%,确保这些多媒体内容能够充分填满其父元素,不会影响整体布局。

7、表单控件的样式重置

button, input, textarea 等表单控件在浏览器中的默认样式通常不一致,通过重置它们的边框、背景、内外边距等,我们能够确保表单控件的一致性,并且更容易应用自定义样式。

8、自定义滚动条样式

在 Webkit 内核的浏览器中,我们通过 ::-webkit-scrollbar 等伪元素来自定义滚动条的外观,保证滚动条与页面整体风格一致,提升用户体验。

总结

通过这份 CSS 重置样式表,你可以有效消除浏览器默认样式带来的不一致问题,为你的项目提供一个统一的视觉起点。这不仅能提升页面在不同浏览器中的一致性,还能节省开发过程中调试布局和兼容性问题的时间。

如果你希望更加专注于页面的功能与设计,而不必为各浏览器间的样式差异烦恼,这份 CSS 重置样式表将是一个非常有效的工具。如果你有更多关于 CSS 重置或其他前端问题的讨论,欢迎在评论区留言,我们一起探讨!

❌
❌