千家信息网

JavaScript数组常见操作有哪些

发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,这篇文章主要为大家展示了"JavaScript数组常见操作有哪些",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"JavaScript数组常见操作有哪些"这篇
千家信息网最后更新 2025年11月10日JavaScript数组常见操作有哪些

这篇文章主要为大家展示了"JavaScript数组常见操作有哪些",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"JavaScript数组常见操作有哪些"这篇文章吧。

创建数组

创建数组是基本功,其方法主要包括以下几种:

const arr = [1,2,3]                   // 数组字面量const arr = [,,,]                     // 三元素空位数组(hole array)const arr = new Array(4)              // [,,,,]const arr = new Array(4,2)            // [4,2]const arr = Array.of(1,2,3)           // [1,2,3]

其中,我们一般最常用的是数组字面量法。

判断是不是数组

判断是不是数组的方法主要有:

// 方法一[1,2,3] instanceof Array   // 方法二[1,2,3].constructor === Array// 方法三Object.prototype.toString.call([1,2,3]) === '[object Array]'// 方法四Array.isArray([1,2,3])// 方法五(兼容写法)function isArray(arr){    return Array.isArray ?         Array.isArray(arr):Object.prototype.toString.call(arr) === '[object Array]'}

一般最常用的应该是 isArray 方法。

类数组和数组的转换

我们有时碰到的数据结构不是纯数组,一般将其归类为"类数组",类数组可以借助以下方法转为纯数组:

const x = document.querySelectorAll('a');// 方法一Array.prototype.slice.call(x);// 方法二Array.from(x);Array.from(x,mapFn,thisArg);// 方法三[...x]// 方法四function toArray(x){    let res = []    for(item of x){        res.push(item)    }    return res}    // 方法五Array.apply(null,x)    // 方法六[].concat.apply([],x)

方法五和六本质上都是利用了 apply 的特点,即传给 apply 的第二个参数(数组或者类数组)会被转换为一个参数列表,这些参数再送到调用的方法(new Array 或者 concat)中。

数组去重

数组去重,本质上都需要比较两个元素是否相等,如果相等,则抛弃一个元素。为了准确地判断,这里统一使用 Object.is 进行比较。

1)利用 set 去重

set 要求元素不重复,因此将数组转换为 set 之后就可以去重了,接着再转换回数组即可。

function unique(arr){    return Array.from(new Set(arr))    // return [...new Set(arr)]}

2)双重循环 + splice

外层循环遍历所有元素,里层循环遍历当前元素往后的所有元素,若发现相等则利用 splice 移除掉一个。记得里层循环每次要回退一格,否则会遗漏掉某些元素

function unique(arr){    for(let i = 0;i < arr.length;i++){        for(let j = i + 1;i < arr.length;j++){            if(Object.is(arr[i],arr[j])){                arr.splice(j,1)                j--            }        }    }    return arr}

3)新建数组 + includes

新建数组,每次往数组中添加元素之前都检查数组中是否已有该元素:

function unique(arr){    const res = []    arr.forEach((item,index) => {        // 也可以 if(res.indexOf(item) == -1),但是无法正确判断 NaN        if(!res,includes(item)){            res.push(item)        }    })}

4)reduce + includes

function unique(arr){    return arr.reduce((acc,cur) => {        // return acc.includes(cur) ? acc : acc.concat(cur)        return acc.includes(cur) ? acc : [...acc,cur]    },[])}

5)新建数组 + sort

根据 sort 的机制(在每个元素上调用 toStrng,之后在字符串层面进行排序),让相等的元素聚集在一起。新建数组,每次往数组中添加元素之前都检查该元素是否等于前面的元素,是则属于重复元素:

function unique(arr){    arr.sort()    const res = [arr[0]]    for(let i = 1;i < arr.length;i++){        if(!Object.is(arr[i],arr[i-1])){            res.push(arr[i])        }    }    return res}

6)新建数组 + 利用对象属性

这种方法其实和"新建数组 + includes"一样。新建数组,每次往数组中添加元素之前都检查该元素是否已经作为对象的属性:

// 对象属性值可以认为是元素重复的次数function unique(arr){    const res = []    const obj = {}    arr.forEach((item,index) => {        if(!obj[item]){            res.push(item)            obj[item] = 1        } else {            obj[item]++        }    })    return res}

这里检测的是对象的属性名,而属性名本质上是一个字符串,因此会认为 obj[true]obj["true"]是相等的,从而导致元素 true 或者元素 "true" 未能放入新数组中

7)利用 map

本质上和上面的方法是一样的,但是不需要新建数组:

function unique(arr){    let map = new Map()    for(item of arr){        if(!map.has(item)){            map.set(item,true)        }    }    return [...map.keys()]}

8)filter + indexOf

去掉重复的元素,换个角度来理解就是保留那些索引等于第一次出现时的索引的元素,这样的元素可以用 filter 筛选出来,放到一个数组中:

function unique(arr){    return arr.filter((item,index) => index === arr.indexOf(item))}

使用 indexOf 的缺点是无法正确判断 NaN。

以上是"JavaScript数组常见操作有哪些"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

数组 元素 方法 属性 对象 本质 循环 常见 内容 参数 篇文章 检查 字符 字符串 字面 常用 索引 学习 帮助 两个 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 希望之村服务器更新公告 软件开发费交印花税吗 海康服务器登录步骤 怎样删除网络连接上的服务器 倪光南网络安全 怎么删除php数据库记录 网络安全升级系统软件 网络技术软件技术的发展 海南裕居网络技术有限公司电话 csgo怎么挑选服务器 服务器的认证密码在哪看 浙江戴尔服务器虚拟化操作 水电收费数据库管理系统设计 网络安全局代码 方舟非官方服务器管理器 分子生物学上的go数据库 松江区市场软件开发费用是多少 建立服务器网站 汽车行业有哪些仿真软件开发 数据库表字段名用中文还是英语 原神为什么有不同服务器 三一重工软件开发面试流程 软件开发各个环境的版本关联 数据库中什么叫全局约束 arcgis中连接数据库 服务器分机怎么开视频 赤子城网络技术公司怎么样 西门子tc软件开发 信息网络安全会议心得体会 list查数据库方法吗
0