js数组常见操作方法总结

2023-11-01

0.将数组中所有name改成ChName,Name改成EnName    
var arr1 = [
    {name:'aa',Name:'ss',children:[{name:'ww',Name:'nn'}] },
    {name:'ff',Name:'ee'},
]
let arr2 = JSON.parse(    
    JSON.stringify(arr1)
      .replace(/name/g, "ChName")
      .replace(/Name/g, "EnName")
 );
console.log(arr2)

1.合并数组   concat()

var arr1 = [1,2,3]
var arr2 = [4,5]
var arr3 = arr1.concat(arr2)

2.数组转换成字符串   join()       toString()

var arr = [2,3,4]
console.log(arr.join())   //2,3,4
console.log(arr.join('-'))   //2-3-4  指定字符连接

var arr = [2,3,4]
console.log(arr.toString())   //2,3,4

3.向数组末尾追加元素   push()

var a = [2,3,4];
var b = a.push(5);
console.log(a); //[2,3,4,5]
console.log(b); //4
push方法可以一次添加多个元素push(data1,data2....)

4.删除并返回数组的最后一个元素   pop()

var arr = [2,3,4]
console.log(arr.pop()) //4
console.log(arr) //[2,3]

5.删除并返回数组的第一个元素   shift()

var arr = [2,3,4];
console.log(arr.shift()); //2
console.log(arr); //[3,4]

6.向数组的开头添加一个或更多元素   unshift()

var arr = [2,3,4,5];
console.log(arr.unshift(3,6)); //6
console.log(arr); //[3, 6, 2, 3, 4, 5]

7.根据索引获取指定元素   slice()

返回一个新的数组,包含从 start 到 end (不包括该元素)的元素。该方法不会修改原数组。

var arr = [2,3,4,5];
console.log(arr.slice(1,3)); //[3,4]
console.log(arr); //[2,3,4,5]

8.向/从数组添加/删除元素,并返回删除的元素   splice()

array.splice(index, howmany, item1, ....., itemX)

index 必需。整数,指定在什么位置添加/删除项目,使用负值指定从数组末尾开始的位置。
howmany 可选。要删除的项目数。如果设置为 0,则不会删除任何项目。
item1, ..., itemX 可选。要添加到数组中的新项目。

var a = [5,6,7,8];
console.log(a.splice(1,0,9)); //[]
console.log(a); // [5, 9, 6, 7, 8]
var b = [5,6,7,8];
console.log(b.splice(1,2,3)); //[6, 7]
console.log(b); //[5, 3, 8]

9.将数组元素计算为一个值   reduce()    reduceRight()

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

array.reduceRight(function(total, currentValue, currentIndex, arr), initialValue)

参数 描述
total 必需。初始值, 或者计算结束后的返回值。
currentValue 必需。当前元素
currentIndex 可选。当前元素的索引
arr 可选。当前元素所属的数组对象。

求数组所有项的和
const arr = [1,2,3,4,5]
var newArr = arr.reduce((prev, current)=>{
    return prev + current
})
console.log(newArr)  //15

数组去重        
const arr = [1,1,2,2,3,3]
var newArr = arr.reduce((prev,current)=>{
    !prev.includes(current) && prev.push(current)
    return prev
},[])
console.log(newArr)  //[1, 2, 3]

扁平化数组
const arr = [[1,2],[3,4],[5,6]]
var newArr = arr.reduce((prev, current)=>{
    return [...prev, ...current]
},[])
console.log(newArr)  //[1, 2, 3, 4, 5, 6]

10.排序   sort()
按照 Unicode code 位置排序,默认升序

var fruit = ['cherries', 'apples', 'bananas'];
fruit.sort(); // ['apples', 'bananas', 'cherries']
var scores = [1, 10, 21, 2];
scores.sort(); // [1, 10, 2, 21]


11.颠倒数组中元素的顺序   reverse()

var arr = [2,3,4];
console.log(arr.reverse()); //[4, 3, 2]
console.log(arr); //[4, 3, 2]

12. 根据元查找位置  indexOf()      lastIndexOf()

indexOf 是从前往后查找, lastIndexOf 是从后往前查找
都有两个参数:(查找的值,查找起始位置)   。不存在,返回 -1 ;存在,返回位置
indexOf

var a = [2, 9, 9];
a.indexOf(2); // 0
a.indexOf(7); // -1
 
if (a.indexOf(7) === -1) {
 // element doesn't exist in array
}
lastIndexOf
 
var numbers = [2, 5, 9, 2];
numbers.lastIndexOf(2);  // 3
numbers.lastIndexOf(7);  // -1
numbers.lastIndexOf(2, 3); // 3
numbers.lastIndexOf(2, 2); // 0
numbers.lastIndexOf(2, -2); // 0
numbers.lastIndexOf(2, -1); // 3


13.检测数组所有元素是否符合指定条件(函数提供) every()
每一项都返回 ture,才返回 true

function isBigEnough(element, index, array) {
 return element < 10;
}
[2, 5, 8, 3, 4].every(isBigEnough); // true

14.检测数组中的元素是否存在满足指定条件的(函数提供) some()
如果有一项满足条件,就会返回true , 剩余的元素不会再执行检测

function compare(element, index, array) {
 return element > 10;

[2, 5, 8, 1, 4].some(compare); // false
[12, 5, 8, 1, 4].some(compare); // true


15.过滤数组中符合条件的元素,返回新数组     filter

array.filter(function(currentValue,index,arr), thisValue)

参数 描述
currentValue 必须。当前元素的值
index 可选。当前元素的索引值
arr 可选。当前元素属于的数组对象

var a = [1, 5, 10, 15];
var b = a.filter(function(x) {
  return x > 5;
});
console.log(b)  //[10, 15]

js中filter过滤用法总结 - 寒冷的雨呢 - 博客园


16.验证数组中符合条件的返回true/false,或者根据函数处理后  返回新数组    map

参数同filter

var a = [1, 5, 10, 15];
var b = a.map(function(x) {
    return x > 5;
});
console.log(b)   //[false, false, true, true]

var a = [1, 5, 10, 15];
var b = a.map(function(x) {
    return x * 5;
});
console.log(b) //[5, 25, 50, 75]

17. 数组遍历   forEach

参数同filter

const items = ['item1', 'item2', 'item3'];
const copy = []; 
items.forEach(function(item){
 copy.push(item)
});

ES6新增新操作数组的方法


1、find():
传入一个回调函数,找到数组中符合当前搜索规则的第一个元素,返回它,并且终止搜索。

var a = [1, '5', 10, 15];
var b = a.find((value,index,arr)=> {
     return typeof value === "number"
})
console.log(b) //1

2、findIndex():
传入一个回调函数,找到数组中符合当前搜索规则的第一个元素,返回它的下标,终止搜索。

const arr = [1, "2", 3, 3, "2"]
console.log(arr.findIndex(n => typeof n === "number")) // 0

3、填充数组  fill():
用新元素替换掉数组内的元素,可以指定替换下标范围。

arr.fill(value, start, end)

参数 描述
value 必需。填充的固定值。
start 可选。开始填充位置。
end 可选。停止填充位置 (默认为 array.length)

let a = [1, 2, 3,]
a.fill(1);
console.log(a); //[1, 1, 1]

let b = [1, 2, 3, 4, 5, 6]
b.fill(6, 2, 4)
console.log(b);  //[1, 2, 6, 6, 5, 6]
第2个位置(不是索引)开始(不包括第2个),到第4个位置结束(包括第4个)


4、批量复制   copyWithin():
选择数组的某个下标,从该位置开始复制数组元素,默认从0开始复制。也可以指定要复制的元素范围。

array.copyWithin(target, start, end)

参数 描述
target 必需。复制到指定目标索引位置。就是开始被复制的索引位置
start 可选。元素复制的起始位置。
end 可选。停止复制的索引位置 (默认为 array.length)。如果为负值,表示倒数。


const arr = [1, 2, 3, 4, 5]
console.log(arr.copyWithin(3))
 // [1,2,3,1,2] 从下标为3的元素开始被复制,复制数组,所以4, 5被替换成1, 2


const arr1 = [1, 2, 3, 4, 5]
console.log(arr1.copyWithin(3, 1))
// [1,2,3,2,3] 从下标为3的元素开始,复制数组,指定复制的第一个元素下标为1,所以4, 5被替换成2, 3


const arr2 = [1, 2, 3, 4, 5]
console.log(arr2.copyWithin(3, 1, 2))
// [1,2,3,2,5] 从下标为3的元素开始,复制数组,指定复制的第一个元素下标为1,结束位置为2(不包括改位置),所以4被替换成2

5、Array.from()
通过拥有 length 属性的对象或可迭代的对象来返回一个数组

Array.from(object, mapFunction, thisValue)

参数 描述
object 必需,要转换为数组的对象。
mapFunction 可选,数组中每个元素要调用的函数。
thisValue 可选,映射函数(mapFunction)中的 this 对象。

var arr = Array.from('foo');
console.log(arr)// ["f", "o", "o"]

var a = [1, 2, 3]或者var a = '123'
var arr = Array.from(a, x => x * 10);
console.log(arr)// [10, 20, 30]
6、Array.of()
用于将一组值,转换为数组。这个方法的主要目的,是弥补数组构造函数 Array() 的不足。因为参数个数的不同,会导致 Array() 的行为有差异。

Array() // []
Array(3) // [, , ,]
Array(3, 11, 8) // [3, 11, 8]
Array.of(7);    // [7]
Array.of(1, 2, 3); // [1, 2, 3]

10、includes
判断数组中是否存在该元素,参数:查找的值、起始位置,可以替换 ES5 时代的 indexOf 判断方式。indexOf 判断元素是否为 NaN,会判断错误。

var a = [1, 2, 3];
a.includes(2); // true
a.includes(4); // false

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

js数组常见操作方法总结 的相关文章

  • 如何让 Google Apps 脚本进行 SHA-256 加密?

    我需要使用文本输入 1 轮 十六进制输出 SHA 256 加密来加密字符串 这应该是一个长度为 64 的字符串 我在 Google Apps 脚本文档中尝试过的每个 SHA 256 加密模块都会返回一组数字 例如 function SHA2
  • javascript函数知道它的名字吗

    我有一个名为 getItem 的函数 我想使用其中的代码读取该函数的名称 这可能吗 function getItem var functionName how do I read the function name alert functi
  • 如果Functions是javascript中的对象,为什么function.constructor指向Function而不是Object?

    当像这样从窗口对象创建以下函数时 function userInfo 既然函数是对象 为什么 userInfo constructor 显示 Function 而不是 Object 当使用以下内容时 它甚至显示函数而不是对象 Functio
  • 如何在React-Native中选择ListView的一项?

    我是 React Native 的新手 我想使用 ListView 选择一项 当我第一次按下 item 时 ListView renderRow 被调用 但终究不起作用 我该如何修复这个错误 我的问题出在哪里 我写了一个演示here htt
  • 流媒体性能 - Canvas 与

    我正在开发一个应用程序 需要通过 webSocket 连接以每秒至少 30 帧的速度持续传输图像 我遇到了一些性能问题 并希望尽我所能进行优化 我想知道使用不断更新的图像之间的性能差异是什么 就像这样 img src someDynamic
  • 如何使用 Underscore 获取 JavaScript 数组中的重复项

    我有一个数组 我需要重复的项目并根据特定属性打印这些项目 我知道如何使用 underscore js 获取唯一项目 但我需要找到重复项而不是唯一值 var somevalue name john country spain name jan
  • 粉碎一个元素,向随机方向发送碎片

    我试图 粉碎 一个元素 例如 一个图像 并将其碎片朝随机方向飞行 当碎片到达目的地时 即x距离 以像素为单位 它们变成原始图像的较小版本 jQuery UI 的explode http api jqueryui com explode ef
  • 如何使用 console.log 省略文件/行号

    如今 您可以在 Chrome 的控制台中编写非常好的东西 查看this https developer chrome com devtools docs tips and tricks关联 我也做了一个截图 正如您在屏幕截图中看到的那样 文
  • 如何更改点击事件上的引导插入符指向方向

    我正在使用 2 3 2 引导程序 因为当我单击菜单按钮时 我可以更改插入符号图标的位置 我需要当我单击图标插入符号向上时 当您单击另一个项目时 插入符号返回到初始状态 这怎么可能 导航代码 div div class container d
  • 尝试使用 CasperJS 跟踪 iframe 中的链接

    我正在尝试使用CasperJS http casperjs org index html跟踪 iframe 中的链接 但我似乎无法获取 iframe 的文档 这是使用我找到的 iframe 示例页面进行的测试 第三个 iframe 有一个名
  • 如何垂直打印数组中的字符串元素? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我有一个数组 我想垂直打印每个元素 例如 myArr abc def ghi 输出应该是 a d g b e h c f
  • 标记内的值发生变化时调用函数

    JavaScript 有没有什么方法可以在段落标记的值更改时调用函数 概述 HTML p 00 00 p
  • 使用 jQuery 更改 SVG 元素的“xlink:href”属性

    我正在尝试使用单击事件更改 xlink href 属性 到目前为止它部分有效 这就是我正在做的 HTML a href class ui btn ui corner all ui shadow editIcon style text ali
  • 如何更改 Vuetify 日历日期格式

    我正在尝试在以下 Vuetify 日历上启用输入事件 https github com vuetifyjs vuetify blob master packages docs src examples calendars complex e
  • 如何使用 JavaScript 播放任意 MIDI 音符?

    澄清一下 我不想生成 MIDI 文件 也不想播放 MIDI 文件 我希望即时播放 MIDI 音符 我尝试使用https github com mudcube MIDI js https github com mudcube MIDI js作
  • 单击时突出显示文本(javascript jquery html)

    当您在所有浏览器中双击某个单词时 它们会自动突出显示单击下的单词 但是否有可能找到一种方法exact单击一下就会发生同样的事情吗 我想这涉及到的事情可能是 TextRange 的东西 对所有段落 或整个正文或 div 的 onclick 做
  • D3 时间解析返回 null

    根据此页面上的说明 https github com mbostock d3 wiki Time Formatting https github com mbostock d3 wiki Time Formatting我正在尝试解析 ISO
  • 用于图形操作的 Javascript 库

    有没有建议的 javascript 替代 pythonpygraph http code google com p python graph or NetworkX http networkx lanl gov 应该注意的是 可视化不是必需
  • jQuery 单击附加元素不起作用

    我有一个数组 我正在从 Array 获取数据并在 jQuery Append to list 中使用它 但是当我单击列表项时 它只显示最后一个元素 var array 1 2 7 3 4 8 5 6 9 for var i 0 i lt a
  • Firefox 和 Chrome 为 offsetTop 提供了不同的值

    我试图相对于输入字段定位一个跨度元素 让我们称之为 工具提示跨度 为此 我将工具提示跨度和输入字段包装在另一个跨度元素中 我们称之为 包装器跨度 该元素具有position relative 然后我设置position absolute在工

随机推荐

  • fastjson反序列化漏洞(CVE-2017-18349)

    文章目录 fastjson 序列化 FastJson 序列化操作 反序列化 漏洞原理 漏洞复现 CVE 2017 18349 fastjson fastjson 是阿里巴巴开发的 java语言编写的高性能 JSON 库 用于将数据在 Jso
  • postgresql jdbc连接参数

    jdbc postgresql 192 168 1 23 12308 test useUnicode true amp characterEncoding gbk amp allowEncodingChanges true 见官网 http
  • 2023-2030老龄化(>=65)比率预测模型

    目录 前言 一 数据来源和处理 二 相关性检验 图形说明 相关矩阵 三 LSTM算法预测 四 BP神经网络预测 前言 如何预测未来八年老龄化比率 作者从以下四个角度出发 GDP 医院数 医院包括综合医院 中医医院 中西医结合医院 民族医院
  • 1_有关 01背包问题 和 完全背包问题 的详解

    目录 一 01背包问题 物品仅可选一次 1 题目 2 版本1 题解代码 代码 详解 3 版本2 题解代码 优化为一维 代码 详细 4 版本3 题解代码 优化输入 优选 代码 详解 二 完全背包问题 物品可选无限次 1 题目 2 基础版本1
  • OpenCV——中值滤波

    目录 一 原理概述 二 C 代码 三 结果展示 1 原图 2 3x3滤波 3 9x9滤波 四 python代码 一 原理概述 中值滤波 Median Filter 是一种非线性滤波技术 其基本思想是在单通道中将像素点邻域的灰度值进行排序 取
  • 启明云端分享

    1 Sstar System Tool说明 软件开发人员访问SigmaStar芯片寄存器 必须使用Debug Tool硬件工具和Sstar System Tool软件工具 Debug Tool硬件工具 如图所示 使用USB延长线连接PC机
  • 设计模式-策略模式

    策略模式是一种行为型设计模式 其主要目的是允许在运行时选择算法的行为 在Java中 我们可以使用策略模式来根据不同的条件动态地选择不同的算法 下面是一个示例代码 展示了如何在Controller中确定是什么策略 以及如何调用相应的Servi
  • php函数漏洞

    1 intval intval 获取变量的整数值 说明 int intval mixed var int base 10 通过使用指定的进制 base 转换 默认是十进制 返回变量 var 的 integer 数值 intval 不能用于
  • 区块链面临的挑战(一)

    id BSN 2021 公众号 BSN研习社 分布式存储 加密算法 共识机制 具有这些典型技术特征的区块链技术自一诞生 就被诸多行业看好 蕴含巨大的潜力 从实践进展来看 区块链技术在商业银行的应用大部分仍在构想和测试之中 距离在生活 生产中
  • 来自美团资深技术专家亲笔的400页的高并发系统设计,近50个核心难点,让你面试直接起飞!

    前言 在现今IT界特别是程序员 如果你对于高并发都没有接触和了解过未免也有些太孤陋寡闻 而作为一个优秀的程序员 高并发系统架构设计师必须要掌握的 很简单 现在大多数互联网公司都会用到高并发系统架构设计 像常见的 秒杀活动 抢红包 微博热搜
  • 【JAVAWEB开发】基于Java+Servlet+Ajax+jsp网上购物系统设计实现

    哈喽 大家好呀 这篇给的大家带来的是网上购物系统设计 在传统电商时代 用户是先有需求再购买 用户对平台较为依赖 商家对消费者很难有直接的影响力 而如今社交 电商解决了产品质量的信息不对称问题 电商已经成为当今经济发展的一个重要领域 而网上购
  • 一张图看明白GPU原理

    GPU直通实现方式 通过虚拟化平台的直通技术可以将显卡直接给虚拟机使用 与物理机接入显卡效果基本一致 在询价上只要安装了对应显卡的显示驱动 显卡就可以为这个虚拟机提供高性能的图形能力 GPU虚拟化 共享能够将一个物理存在的显卡分享给多个虚拟
  • QPainterPath全功能解锁

    QPainterPath可以自动计算bounding和shap 前者决定了重绘区域 后者决定了碰撞边界 可以说 QPainterPath是绘制的最优解之一 但QPainterPath内并未直接提供缩放 旋转等功能 很多人借助QPainter
  • Qt QList和QLinkedList使用

    文章目录 1 QList 1 1 链表基础使用 添加 修改 查找 删除 1 2 迭代器使用 STL风格 Java风格 2 QLinkedList 1 QList 1 1 链表基础使用 添加 修改 查找 删除 链表初始化 添加元素 QList
  • 2022第三届全国大学生网络安全精英赛练习题(6)

    全国大学生网络安全精英赛 2022第三届全国大学生网络安全精英赛练习题 6 文章目录 全国大学生网络安全精英赛 2022第三届全国大学生网络安全精英赛练习题 6 总结 501 下列有关代理服务器说法错误的是 A 代理服务器访问模式是浏览器不
  • sort函数与结构体

    include
  • Java高级编程实验_java高级编程项目实践.ppt

    java高级编程项目实践 ppt 由会员分享 可在线阅读 更多相关 java高级编程项目实践 ppt 32页珍藏版 请在人人文库网上搜索 1 Java高级编程项目实践 徐铭 课程目录 第一部分 需求定义 第二部分 用户界面设计 第三部分 数
  • 停止开发GPT-4?我更加关注数据版权、信息安全和数字鸿沟问题

    近日 随着ChatGPT和GPT 4的迅猛发展 人工智能对于人类社会以及文明的影响将是我们需要重视的问题 有人认为ChatGPT的表现引人入胜 但同时也让人感到毛骨悚然 因此 AI是否可靠 是否会导致灾难 机器智能超过人类的 奇点 是否真正
  • 公共IPV6 dns大全

    dns是什么和公共ipv4可阅读本篇文章 dns大全 一 阿里ipv6 dns 阿里的dns好在于自家的服务器遍布全球 加上自家研究的CDN技术快稳定 强大的阿里云团队技术坚持也是国内首家支持IPv4和IPv6 双端加持 安全快速 2400
  • js数组常见操作方法总结

    0 将数组中所有name改成ChName Name改成EnName var arr1 name aa Name ss children name ww Name nn name ff Name ee let arr2 JSON parse