JS数组方法合集(含应用场景)

news2024/10/6 16:24:33

1.Array.push()

向数组的末尾添加一个或多个元素,并返回新的数组长度。原数组改变

const arr = ["apple", "orange", "grape"];
const arr_length = arr.push("banana");

console.log("arr", arr, "arr_length", arr_length);
// arr: [ 'apple', 'orange', 'grape', 'banana' ] arr_length: 4

2.Array.pop()

删除并返回数组的最后一个元素,若该数组为空,则返回undefined。原数组改变。

const arr = ["apple", "orange", "grape"];
const del_data = arr.pop();

console.log("arr:", arr, "del_data:", del_data);
// arr: [ 'apple', 'orange' ] del_data: grape

3.Array.unshift()

向数组的开头添加一个或多个元素,并返回新的数组长度。原数组改变

const arr = ["apple", "orange", "grape"];
const arr_length = arr.unshift("banana");

console.log("arr:", arr, "arr_length:", arr_length);
// arr: [ 'banana', 'apple', 'orange', 'grape' ] arr_length: 4

4.Array.shift()

删除并返回数组的第一个元素,若该数组为空,则返回undefined。原数组改变。

const arr = ["apple", "orange", "grape"];
const del_data = arr.shift();

console.log("arr:", arr, "del_data:", del_data);
// arr: [ 'orange', 'grape' ] del_data: apple

5.Array.concat(arr1,arr2,...)

合并多个数组,生成一个新数组,原数组不变

const arr1 = ["apple", "orange", "grape"];
const arr2 = ["banana", "watermelon"];
const arr3 = ["mango"];
const newArr = arr1.concat(arr2, arr3);

console.log("newArr:", newArr);
// newArr: [ 'apple', 'orange', 'grape', 'banana', 'watermelon', 'mango' ]

6.Array.join()

将数组的每一项使用指定的字符连接成一个字符串。默认连接字符为","。不改变原数组

const arr = ["apple", "orange", "grape"];
const str1 = arr.join();
const str2 = arr.join("--");

console.log("str1:", str1);
// str1: apple,orange,grape

console.log("str2:", str2);
// str2: apple--orange--grape

7.Array.reverse()

将数组倒序,改变原数组

const arr = ["one", "two", "three"];

arr.reverse();

console.log("arr:", arr);
// arr: [ 'three', 'two', 'one' ]

8.Array.sort(fun)

对数组排序。参数 fun 可选,必须是函数,规定排序顺序。原数组改变。

注:如果调用该方法时没有使用参数,将不会按照数值大小排序,按照字符编码的顺序进行排序。

如果想按照其他规则进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

  • 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
  • 若 a 等于b,则返回 0。
  • 若 a 大于 b,则返回一个大于 0 的值。

简单点就是:比较函数两个参数 a 和 b,返回 a-b 升序,返回 b-a 降序

从小到大

const arr = [85, 22, 33, 66, 1, 9, 222];

const sortMinToMax = function (a, b) {

  return a - b;

};

console.log("arr:", arr.sort(sortMinToMax));
// arr: [ 1,  9,  22, 33, 66, 85, 222 ]

从大到小

const arr = [85, 22, 33, 66, 1, 9, 222];

console.log(

  "arr:",

  arr.sort((a, b) => b - a)

);
// arr: [ 222, 85, 66, 33, 22,  9,  1 ]

按照数组对象中的某个值排序

const arrObj = [

  {

   name: "第一名",

   age: 23,

  },

  {

   name: "第二名",

   age: 18,

  },

  {

   name: "第三名",

   age: 28,

  },

  {

   name: "第四名",

   age: 15,

  },

];


const sortMinToMax = (key) => {

  return (a, b) => {

   return a[key] - b[key];

  };

};


console.log("arrObj:", arrObj.sort(sortMinToMax("age")));
/* arrObj: [

    { name: '第四名', age: 15 },

    { name: '第二名', age: 18 },

    { name: '第一名', age: 23 },

    { name: '第三名', age: 28 }

  ] */

9.Array.map(function(currentValue,index,arr), thisValue)

  通过指定函数处理数组的每个元素,并返回处理后的新数组。不改变原数组

基础应用:

const arr = [2, 4, 6, 8];
const newArr = arr.map((item) => item * 2);

console.log("newArr:", newArr);
// newArr: [ 4, 8, 12, 16 ]

多数组合并成一个新的数组对象:

const arr1 = ["吕大", "赵二", "关三", "典小四"];
const arr2 = ["公爵", "侯爵", "伯爵", "子爵"];


const newArr = arr1.map((item, index) => {

  return {

   level: arr2[index],

   name: item,

  };

});


console.log("newArr:", newArr);
/* newArr: [

    { level: '公爵', name: '吕大' },

    { level: '侯爵', name: '赵二' },

    { level: '伯爵', name: '关三' },

    { level: '子爵', name: '典小四' }

  ] */

拼接数组里的多个键值

const arr = [

  { level: "公爵", name: "吕大" },

  { level: "侯爵", name: "赵二" },

  { level: "伯爵", name: "关三" },

  { level: "子爵", name: "典小四" },

];


const newArr = arr.map((item) => `${item["level"]}${item["name"]}`);


console.log("newArr:", newArr);

// newArr: [ '公爵吕大', '侯爵赵二', '伯爵关三', '子爵典小四' ]

map中的第二个参数thisValue的应用

const arr = [2, 4, 6, 8];

/* 该this参数将在回调函数中使用。默认情况下,其值为undefined。这里this值更改为数字10,如果不写this指向的是全局 */

const newArr = arr.map(function (item) {

  return item * this;

}, 10);


console.log("newArr:", newArr);
// newArr: [ 20, 40, 60, 80 ]

10.Array.slice(start,end)

按照条件查找出其中的部分内容,返回一个新的数组,包含从 start(包括该元素) 到 end (不包括该元素)的 Array 中的元素。不改变原数组。

array.slice(n) 第二个参数省略,则一直查找到末尾

array.slice(0)原样输出内容,可以实现数组克隆

array.slice(-n,-m) slice支持负参数,从最后一项开始算起,-1为最后一项,-2为倒数第二项

const arr = [2, 4, 6, 8];
const newArr = arr.slice(1, 3);

console.log("newArr:", newArr);
// newArr: [ 4, 6 ]

11.Array.splice(index,howmany,item1,item2…)

从数组中添加或删除元素。改变原数组。

从index位置开始删除howmany个元素,并将item1、item2…数据从index位置依次插入。howmany为0时,则不删除元素。

const arr = ["吕大", "赵二", "关三", "典小四"];

arr.splice(2, 1, "杰尼龟", "皮卡丘");

console.log("arr:", arr);
// arr: [ '吕大', '赵二', '杰尼龟', '皮卡丘', '典小四' ]

12.Array.forEach(function(item, index, arr))

用于调用数组的每个元素,并将元素传递给回调函数。原数组不变。(注意该方法和map的区别,若直接打印Array.forEach,结果为undefined)

item

必需。当前元素

index

可选。当前元素的索引值。

arr

可选。当前元素所属的数组对象。

forEach只遍历,不生成新数组;map返回新数组

const arr = ["吕大", "赵二", "关三", "典小四"];

arr.forEach((item, index) => console.log(`第${index + 1}个人是${item}`));
/* 

第1个人是吕大

第2个人是赵二

第3个人是关三

第4个人是典小四 

*/

13.Array.filter(function(currentValue,index,arr), thisValue)

检测数值元素,并返回符合条件所有元素的新数组。原数组不变。

const arr = [2, 4, 6, 8];

const newArr = arr.filter((item) => item > 4);

console.log("newArr:", newArr);
// newArr: [ 6, 8 ]

14.Array.every(function(currentValue,index,arr), thisValue)

对数组中的每一项进行判断,若都符合则返回true,否则返回false。不改变原数组。类似于并逻辑

const arr1 = [

  { level: "公爵", name: "吕大", isShow: false },

  { level: "侯爵", name: "赵二", isShow: false },

  { level: "伯爵", name: "关三", isShow: true },

  { level: "子爵", name: "典小四", isShow: true },

];


console.log(

  "arr1:",

  arr1.every((item) => item.isShow)

);
// arr1: false



const arr2 = [

  { level: "公爵", name: "吕大", isShow: true },

  { level: "侯爵", name: "赵二", isShow: true },

];

console.log(

  "arr2:",

  arr2.every((item) => item.isShow)

);
// arr2: true

15.Array.some(function(currentValue,index,arr), thisValue)

对数组中的每一项进行判断,若都不符合则返回false,否则返回true。不改变原数组。类似于或逻辑

const arr1 = [

  { level: "公爵", name: "吕大", isShow: false },

  { level: "侯爵", name: "赵二", isShow: false },

  { level: "伯爵", name: "关三", isShow: true },

  { level: "子爵", name: "典小四", isShow: true },

];


console.log(

  "arr1:",

  arr1.some((item) => item.isShow)

);
// arr1: true



const arr2 = [

  { level: "公爵", name: "吕大", isShow: false },

  { level: "侯爵", name: "赵二", isShow: false },

];


console.log(

  "arr2:",

  arr2.some((item) => item.isShow)

);
// arr2: false

16.Array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。不改变原数组

 数组累加、累乘

let arr = [1,2,3,4,5]

console.log(arr.reduce("result:",(x,y)=>x+y));
//result: 15

console.log(arr.reduce("result:",(x,y)=>x*y));
//result: 120

获取最值(最大值)

let arr = [189, 2, 333, 4, 6, 999, 8, 55, 456, 528];

let maxValue = arr.reduce((pre, cur) => {

  return pre > cur ? pre : cur;

});

console.log("maxValue", maxValue);
// maxValue 999

获取数组元素出现次数

let arr = [1, 2, 5, 8, 9, 5, 2, 3, 4, 6, 1, 8, 22, 5, 9, 4, 3, 5];

let numObj = arr.reduce((pre, cur) => {

  pre[cur] = pre[cur] ? pre[cur] + 1 : 1;

  return pre;

}, {});

console.log("numObj", numObj);
/* numObj {

  '1': 2,

  '2': 2,

  '3': 2,

  '4': 2,

  '5': 4,

  '6': 1,

  '8': 2,

  '9': 2,

  '22': 1

} */

二维数组转化为一维数组

let arr = [

  [2, 3, 4],

  [6, 7, 8],

  [10, 11, 12],

];


let newArr = arr.reduce((pre, cur) => {

  return pre.concat(cur);

}, []);


console.log("newArr", newArr);

/* newArr [

  2,  3,  4,  6, 7,

  8, 10, 11, 12

] */

多维数组转化为一维数组

let arr = [

  [0, 1],

  [1, 2, 3],

  [4, [1, 23]],

];

const newArr = function (arr) {

  return arr.reduce(

   (pre, cur) => pre.concat(Array.isArray(cur) ? newArr(cur) : cur),

   []

  );

};

console.log(newArr(arr));
/* [

  0, 1, 1,  2,

  3, 4, 1, 23

] */

数组去重

let arr = [2, 4, 6, 8, 4, 5, 8, 2, 8, 2, 6, 1, 5, 2, 5];

let newArr = arr.reduce((pre, cur) => {

  if (!pre.includes(cur)) {

    pre.push(cur);

  }

  return pre;

}, []);

console.log("newArr", newArr);
// newArr [ 2, 4, 6, 8, 5, 1 ]

数组对象根据某个键值去重

let arr = [

  { name: "xiaoming", age: 11 },

  { name: "xxx", age: 12 },

  { name: "xiaoming", age: 11 },

];

let obj = {};
let newArr = arr.reduce((pre, cur) => {

  if (!obj[cur.name]) {

    obj[cur.name] = true;

    pre.push(cur);

  }

  return pre;

}, []);

console.log("newArr", newArr);
// newArr [ { name: 'xiaoming', age: 11 }, { name: 'xxx', age: 12 } ]

17.Array.indexOf(item,start)

检测当前值在数组中第一次出现的位置索引。如果没有搜索到则返回 -1。不改变原数组

const arr1 = ["apple", "orange", "grape"];

console.log("arr1:", arr1.indexOf("orange"));
// arr1: 1

const arr2 = ["apple", "orange", "grape", "orange", "banana"];
console.log("arr2:", arr2.indexOf("orange", 2));
// arr2: 3

18.Array.includes(searchElement, fromIndex)

判断一个数组是否包含一个指定的值。如果是返回 true,否则false。不改变原数组

const arr = ["apple", "orange", "grape"];

console.log("result1:", arr.includes("orange"));
// result1: true

console.log("result2:", arr.includes("orange", 2));
// result2: false

19.Array.find(function(currentValue, index, arr),thisValue)

返回通过测试(函数内判断)的数组的第一个元素的值。如果没有符合条件的则返回 undefined。不改变原数组

const arr = [2, 4, 6, 8];

console.log(

  "result:",

  arr.find((item) => item > 4)

);
// result: 6

20.Array.findIndex(function(currentValue, index, arr),thisValue)

返回传入一个测试条件(函数)符合条件的数组第一个元素位置。如果没有符合条件的元素返回 -1。不改变原数组

const arr = [2, 4, 6, 8];


console.log(

  "result:",

  arr.findIndex((item) => item > 4)

);
// result: 2

21.Array.isArray(obj)

判断一个对象是否为数组。obj为要判断的对象,必需。如果对象是数组返回 true,否则返回 false。不改变原数组

console.log(Array.isArray([2, 4, 6, 8]));
// true

console.log(Array.isArray({ name: "xiaoming" }));
// false

22.Array.join(separator)

用于把数组中的所有元素转换一个字符串。不改变原数组

separator,可选。指定要使用的分隔符。如果省略该参数,则使用逗号作为分隔符。

const fruits = ["Banana", "Orange", "Apple", "Mango"];
const energy = fruits.join(" and ");

console.log("energy:", energy);
// energy: Banana and Orange and Apple and Mango

23.Array.of()

将一组值转换为数组,不考虑参数的数量或类型。

console.log(Array.of(1, "a", [3, 6], { name: "xiaoming" }));
// [ 1, 'a', [ 3, 6 ], { name: 'xiaoming' } ]

24.Array.at()

用于接收一个整数值并返回该索引对应的元素,允许正数和负数。负整数从数组中的最后一个元素开始倒数。不改变原数组。(慎用,语法比较新,注意浏览器版本和node版本,有兼容性问题)

const arr = ["吕大", "赵二", "关三", "典小四"];

console.log(arr.at(-1));
// 典小四

25.Array.flat(depth)

按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。简单来说,就是多维数组扁平化的程度

depth, 指定要提取嵌套数组的结构深度,默认值为 1

flat() 方法会移除数组中的空项

const arr1 = [1, 2, [3, 4]];
console.log(arr1.flat());
// [1, 2, 3, 4]

const arr2 = [1, 2, [3, 4, [5, 6]]];
console.log(arr2.flat());
// [1, 2, 3, 4, [5, 6]]

const arr3 = [1, 2, [3, 4, [5, 6]]];
console.log(arr3.flat(2));
// [1, 2, 3, 4, 5, 6]

//使用 Infinity,可展开任意深度的嵌套数组
const arr4 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];
console.log(arr4.flat(Infinity));
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

其他:

还有一些数组方法,比较深冷,应用场景很低,在此不再演示。如:copyWithin(),entries(),from() ,keys() ,lastIndexOf() ,reduceRight(),toString(),valueOf(),flatMap()。感兴趣的话可以学习了解一下。

注意:

原数组改变的方法有:push pop shift unshift reverse sort splice
不改变原数组的方法有:concat map filter join every some indexOf slice forEach...

小技巧Tip:涉及到数组增,删,改的方法都是改变原数组的;涉及到数组查询类的方法是不改变原数组的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1118409.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JOSEF约瑟 JHOK-ZBM1;JHOK-ZBL1多档切换式漏电(剩余)继电器 面板导轨安装

系列型号: JHOK-ZBL多档切换式漏电(剩余)继电器(导轨) JHOK-ZBL1多档切换式漏电(剩余)继电器 JHOK-ZBL2多档切换式漏电(剩余)继电器 JHOK-ZBM多档切换式漏电&#xf…

【算法训练-动态规划 一】【应用DP问题】零钱兑换、爬楼梯、买卖股票的最佳时机I、打家劫舍

废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【动态规划】,使用【数组】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为&…

springBoot--web--favicon规则

在静态资源目录中找favicon.icon 推荐图标工具 favicon使用 在静态资源中放入下载好的图片,改名为favicon.ico

互联网医院|互联网医疗模式已从概念走向实体建设阶段

近年来,医疗服务领域新形态不断涌现,“互联网医疗”作为其中突出的一种,在挂号结算、远程诊疗、咨询服务等方面进行了不少探索,而早在2015年全国互联网医院成立,标志着“互联网医疗”模式已经从概念走向了实体建设阶段…

【Arduino TFT】Arduino uzlib库,用于解压gzip流,解析和风天气返回数据

忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-10-21 ❤️❤️ 本篇更新记录 2023-10-21 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝&#x1f64…

开源WAF--Safeline(雷池)测试手册

长亭科技—雷池(SafeLine)社区版 官方网站:长亭雷池 WAF 社区版 (chaitin.cn) WAF 工作在应用层,对基于 HTTP/HTTPS 协议的 Web 系统有着更好的防护效果,使其免于受到黑客的攻击 1.1 雷池的搭建 1.1.1 配置需求 操作系统:Linux 指令架构&am…

【框架源码篇 03】Spring源码手写篇-手写AOP

Spring源码手写篇-手写AOP 手写IoC和DI后已经实现的类图结构。 一、AOP分析 1.AOP是什么? AOP[Aspect Oriented Programming] 面向切面编程,在不改变类的代码的情况下,对类方法进行功能的增强。 2.我们要做什么? 我们需要在前面手写IoC&…

[Spring] SpringBoot2 简介(一)—— 基础配置

目录 一、SpringBoot 简介 1、Spring 的缺点 2、SpringBoot 功能 二、SpringBoot 入门案例 1、实现步骤 2、访问服务器 3、入门小结 4、Idea 快速构建 SpringBoot 工程 5、起步依赖无需版本号 6、主启动类的在项目中的位置(*重要*) 三、Sprin…

[AUTOSAR][诊断管理][$10] 会话模式控制

文章目录 一、简介二、指令格式请求: 10 SF会话参数记录有P2Server_max(2byte)和P2*Server_max(2byte),高位在前的表示方式。否定相应:7F SID NRC(否定相应码)三、示例代码(1) uds10_session_ctl.c一、简介 $10服务是Diagnostic Session Control诊断会话控制,子功能有01…

机器学习 | Python决策树算法

基本原理 决策树的基本原理是将数据分成不同的子集,使每个子集尽可能纯净。 这意味着子集中的数据属于同一类别或具有相似的属性。 为了做到这一点,决策树会选择一个特征,并根据该特征将数据分成两个子集。 它会选择那个特征,该特征在划分后的子集中具有最好的纯度,通…

Python获取微信公众号文章数据

这是一个通过 Python mitmproxy 库 实现获取某个微信公众号下全部文章数据的解决方案。首先需要创建一个 Python 虚拟环境,并进入虚拟环境下: $ python -m venv venv $ venv/Scripts/activate我们需要使用 mitmproxy 库 来建立一个网络代理,…

设计模式篇---组合模式

文章目录 概念结构实例总结 概念 组合模式:组合多个对象形成树形结构以表示具有部分-整体关系的层次结构。组合模式让客户端可以统一对待单个对象和组合对象。 当我们开发中遇到树形结构的业务时,可以考虑使用组合模式。(我也没有想明白为啥…

基于springboot实现财务管理系统项目【项目源码+论文说明】

基于springboot实现财务管理系统演示 摘要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生&#x…

Ubuntu的EFI分区无法删除

本文解决的问题:双系统装完后需要删除ubuntu的分区,但是EFI系统分区无法删除。 第一步:cmd中输入命令 diskpart 并回车,如图中①; 第二步:在弹出窗口②中依次输入如下命令即可删除EFI分区; /…

基于springboot实现藏区特产销售平台项目【项目源码+论文说明】

基于springboot实现藏区特产销售管理平台演示 摘要 “互联网”的战略实施后,很多行业的信息化水平都有了很大的提升。但是目前很多藏区特产销售信息仍是通过人工管理的方式进行,需要在各个岗位投入大量的人力进行很多重复性工作,使得对人力物…

USRP-2944 配件讲解,如何选择对应的配件

USRP-2944 产品图片 产品官网价格信息 查看附件和价格 硬件服务 NI硬件服务计划通过简化物流,延长正常运行时间以及根据业界标准维护数据的可追溯性,帮助您节省系统组装、设置和维护所需的时间和金钱。这些计划涵盖多年期维修服务,同时还提…

Python 循环

Python有两个基本的循环命令&#xff1a; while循环for循环 while循环 使用while循环&#xff0c;我们可以在条件为真的情况下执行一组语句。 示例&#xff0c;打印i&#xff0c;只要i小于6&#xff1a; i 1 while i < 6:print(i)i 1注意&#xff1a;记得增加i的值&a…

微机原理:汇编语言语句类型与格式

文章目录 壹、语句类型1、语句分类2、常用伪代码和运算符2.1数据定义伪指令2.1.1字节定义伪指令DB&#xff08;8位&#xff09;2.1.2字定义伪指令DW&#xff08;16位&#xff09;2.1.3双字节伪指令DD2.1.4 多字节定义DF/DQ/DT&#xff08;了解&#xff09; 2.2 常用运算符2.2.1…

数据结构-- 并查集

0. 引入 并查集是来解决等价问题的数据结构。 离散数学中的二元关系。 等价关系需满足自反性、对称性、传递性。 a ∈ S , a R a a R b & b R a a R b ∩ b R c > a R c a \in S, aRa \\ aRb \& bRa \\ aRb \cap bRc >aRc a∈S,aRaaRb&bRaaRb∩bRc>a…

【MATLAB源码-第53期】m代码基于粒子群算法(PSO)的三维路径规划,显示最优路径和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 粒子群算法&#xff08;Particle Swarm Optimization&#xff0c;简称PSO&#xff09;是一种模拟鸟群觅食行为的启发式优化方法。以下是其详细描述&#xff1a; 基本思想&#xff1a; 鸟群在寻找食物时&#xff0c;每只鸟都会…