JS 数组常用操作全集
文章目录
- 1、push()方法
- 2、unshift()方法
- 3、pop() 方法
- 4、shift() 方法
- 5、filter() 方法
- 6、join()方法
- 7、 indexOf() 方法
- 8、reverse() 方法
- 9、slice(start, end) 切片方法
- 10、splice(start, selectcount, ...items) 方法
- 11、includes()方法,
- 12、find()方法
- 13、concat() 方法
- 14、sort(orderfunction)方法
- 15、map()方法
- 16、forEach()函数
- 17、 some()函数
- 18、 every()函数
- 19、findIndex()函数
- 20、fill()函数
- 21、copyWithin()函数
- 22、from()函数
- 23、of()函数
- 24、entries()函数
- 25、values() 迭代器
- 26、keys() 返回迭代器
- 27、reduce()函数
- 28、reduceRight()
1、push()方法
往数组最后添加一个或者多个元素, 返回值是增加之后的数组的 length,而原数组元素也会被改变
> var testArray = [1200,1100,2100,20];
> testArray.push(40,21);
6
> testArray;
[ 1200, 1100, 2100, 20, 40, 21 ]
2、unshift()方法
往数组头添加一个或者多个元素,返回数组长度
> testArray.unshift(703,361)
8
> testArray
[ 703, 361, 1200, 1100, 2100, 20, 40, 21 ]
>
3、pop() 方法
将删除 arrayObject 的最后一个元素,把数组长度减 1,并且返回它删除的元素的值。如果数组已经为空,则 pop() 不改变数组,并返回 undefined 值。
> testArray.pop()
21
> testArray
[ 703, 361, 1200, 1100, 2100, 20, 40 ]
>
4、shift() 方法
用于把数组的第一个元素从其中删除,并返回第一个元素的值,如果数组已经为空,则 shift() 不改变数组,并返回 undefined 值
> testArray.shift()
703
> testArray
[ 361, 1200, 1100, 2100, 20, 40 ]
>
5、filter() 方法
迭代方法, 对数组的每一项都运行给定的函数, 其实就是arrayObject.filter( callback) ,给他一个callback函数,
而 callback回调函数传入三个参数 (item, index, originArray) 分别是‘item:当前执行的元素’ 、‘index:当前元素下标’、‘originArray:原数组’
如果返回值是true,保留该元素,false不保留, 完成后返回一个新的数组
> testArray
[ 361, 1200, 1100, 2100, 20, 40 ] > var filterRes = testArray.filter(function(e,i,arry){return arry[i]<200})
> filterRes
[ 20, 40 ]
>
6、join()方法
join() 方法用于把数组中的所有元素通过指定的分隔符进行字符串拼接并返回,默认使用,
号分割,不改变原数组。
> var resJoin = testArray.join('-')
> resJoin
'361-1200-1100-2100-20-40'
>
7、 indexOf() 方法
寻找数组内出现某个元素第一次出现的索引的方法 lastIndexOf() 从后往前找,最后出现元素的索引的方法 返回的都是索引值,如果没有找到返回 -1 indexOf第二个参数是从哪个索引开始查找
> testArray
[ 361, 1200, 1100, 2100, 20, 40 ]
> testArray.indexOf(20)
4
> testArray.lastIndexOf(361)
0
> testArray.indexOf('test')
-1
> testArray.lastIndexOf('test')
-1
>
8、reverse() 方法
数据反转排序
> testArray.reverse()
[ 40, 20, 2100, 1100, 1200, 361 ] >
9、slice(start, end) 切片方法
返回一个从start 到end(不包含该元素)的一个新数组,该方法不会修改原数组, 看如下案例从 第一个元素截取到第三个,但不包含第三个元素
> testArray
[ 40, 20, 2100, 1100, 1200, 361 ]
> testArray.slice(1,testArray.length-3)
[ 20, 2100 ]
> testArray
[ 40, 20, 2100, 1100, 1200, 361 ]
>
解:
这个可以看着 start : 从0
开始 end: 是从1
开始 计算的
10、splice(start, selectcount, …items) 方法
start 从哪个索引开始, selcetCount 删除几个, items 删除后要加入的元素
> testArray
[ 40, 20, 2100, 1100, 1200, 361 ]
> testArray.splice(3,1,999)
[ 1100 ]
> testArray
[ 40, 20, 2100, 999, 1200, 361 ]
>
11、includes()方法,
参数为查找的值,如果数组中有被查找的值,则输出“true”
> testArray
[ 40, 20, 2100, 999, 1200, 361 ]
> testArray.includes(2100)
true
>
12、find()方法
返回第一个满足过滤方法的元素,一个都没有满足的就返回undefined,遇到一个满足的元素后遍历就停止了
> const testStrArray = [{name:"Dex",age:20},{name:"Lily",age:18},{name:"Lielie",age:23}]
>
> const obtainRes = testStrArray .find((item)=>{
...
... return item.age == 18
...
... }) > obtainRes
{ name: 'Lily', age: 18 }
>
13、concat() 方法
concat() 方法用于连接两个或多个数组。该方法不会改变原数组,仅会返回被连接数组的一个副本。
> const originArr = [{name:'Jack',age:26}]
> const resConcat = testStrArray.concat(originArr)
> resConcat
[ { name: 'Dex', age: 20 },
{ name: 'Lily', age: 18 },
{ name: 'Lielie', age: 23 },
{ name: 'Jack', age: 26 } ]
>
14、sort(orderfunction)方法
按指定的参数对数组进行排序
> resConcat
[ { name: 'Lily', age: 18 },
{ name: 'Dex', age: 10 },
{ name: 'Lielie', age: 23 },
{ name: 'Jack', age: 26 } ] // 降序
> resConcat.sort((a,b) => b.age - a.age)
[ { name: 'Jack', age: 26 },
{ name: 'Lielie', age: 23 },
{ name: 'Lily', age: 18 },
{ name: 'Dex', age: 10 } ] // 升序
> resConcat.sort((a,b) => a.age - b.age)
[ { name: 'Dex', age: 10 },
{ name: 'Lily', age: 18 },
{ name: 'Lielie', age: 23 },
{ name: 'Jack', age: 26 } ]
>
15、map()方法
对数组的每一项都运行给定的函数,返回每次函数调用的结果组成一个新数组,不会更改原数组
> testArray
[ 40, 20, 2100, 999, 1200, 361 ]
> var resMap = testArray.map(item => item * 2) > resMap
[ 80, 40, 4200, 1998, 2400, 722 ]
> testArray
[ 40, 20, 2100, 999, 1200, 361 ]
>
16、forEach()函数
遍历数组的每一个元素
> testArray.forEach(item => {
... console.log(item)
... })
40
20
2100
999
1200
361 >
17、 some()函数
对数组的每一项都运行给定的函数,任意一项都返回 ture,则返回 true
> var compare = function(item, index, originArr){
... return item > 100
... }
> testArray
[ 40, 20, 2100, 999, 1200, 361 ]
> testArray.some(compare)
true
>
> [80,99,98,20].some(compare)
false
>
18、 every()函数
对数组的每一项都运行给定的函数,每一项都返回 ture, 才返回 true(这个和some()正好相反)
> var compare = function(item, index, originArr){
... return item > 100
... }
> testArray
[ 40, 20, 2100, 999, 1200, 361 ]
> testArray.every(compare)
false
>
> [101,102,103].every(compare)
true
>
19、findIndex()函数
传入一个回调函数,找到数组中符合当前搜索规则的第一个元素,返回它的下标,终止搜索。
> testFind
[ { name: 'Dex', age: 10 },
{ name: 'Lily', age: 18 },
{ name: 'Lielie', age: 23 },
{ name: 'Jack', age: 26 } ]
> testFind.findIndex( item => item.age >20)
2
>
20、fill()函数
arr.fill(value, start, end) 用新元素替换掉数组内的元素,可以指定替换下标范围。
> testFind
[ 123,
123,
{ name: 'Lielie', age: 23 },
{ name: 'Jack', age: 26 } ] > testFind.fill(129,0,3)
[ 129, 129, 129, { name: 'Jack', age: 26 } ]
>
解:
star: 从0
开始
end :也是从0
开始
21、copyWithin()函数
arr.copyWithin(target, start, end)
选择数组的某个下标,从该位置开始复制数组元素,默认从0开始复制。也可以指定要复制的元素范围。
> const copyTest = [1,2,3,4,5,6]
> copyTest.copyWithin(3) // 从下标3开始拷贝,刚好将数组前面的1,2,3拷贝覆盖了后面的4,5,6
[ 1, 2, 3, 1, 2, 3 ]
>
> const copyTest1 = [1,2,3,4,5,6]
> copyTest1.copyWithin(3,1) // 依然从下标3开始拷贝,但是指定粘贴的值从下标1开始,所以用2,3,4覆盖了后面的4,5,6
[ 1, 2, 3, 2, 3, 4 ]
>
> const copyTest2 = [1,2,3,4,5,6]
> copyTest2.copyWithin(3,2,3) // 依然从下标3开始拷贝,但是指定粘贴的值从下标2开始,而结束位置为3所以只用3替换了4 ,后面的5,6未被粘贴
[ 1, 2, 3, 3, 5, 6 ]
>
22、from()函数
将类似数组的对象(array-like object)和可遍历(iterable)的对象转为真正的数组
> Array.from('Hello')
[ 'H', 'e', 'l', 'l', 'o' ]
>
23、of()函数
用于将一组值,转换为数组。如同 new Array(1,2,3)
> Array.of('Hello','world',1,2,3)
[ 'Hello', 'world', 1, 2, 3 ]
>
> var ao = new Array(1,2,3)
undefined
> ao
[ 1, 2, 3 ]
>
24、entries()函数
将每一个元素对应下标, 返回一个类似键值对的新数组
> var test = ['hi','no','yes']
> for(let i of test.entries()){
... console.log(i)
... }
[ 0, 'hi' ]
[ 1, 'no' ]
[ 2, 'yes' ] > var testJson = [{name:'dex',age:20},{name:'jack',age:18}]
> for(let key of testJson.entries()){
... console.log(key)
... }
[ 0, { name: 'dex', age: 20 } ]
[ 1, { name: 'jack', age: 18 } ]
undefined
>
25、values() 迭代器
返回元素值,还是迭代上面那个对象
> for(let key of testJson.values()){
... console.log(key)
... }
{ name: 'dex', age: 20 }
{ name: 'jack', age: 18 }
>
>
> var testMap = new Map([['name','Lili'],['tel',13609890132]])
> testMap
Map { 'name' => 'Lili', 'tel' => 13609890132 }
> for(let val of testMap.values()){
... console.log(val)
... }
Lili
13609890132
undefined
>
26、keys() 返回迭代器
类似json 获取对应 的key
> testJson
[ { name: 'dex', age: 20 }, { name: 'jack', age: 18 } ]
> for(let key of testJson.keys()){
... console.log(key)
... }
0
1
>
>
> var testMap = new Map([['name','Lili'],['tel',13609890132]])
> testMap
Map { 'name' => 'Lili', 'tel' => 13609890132 }
> for(let key of testMap.keys()){
... console.log(key)
... }
name
tel
>
27、reduce()函数
reduce 不会改变原数组,迭代数组的所有项,然后构建一个最终返回的值,从数组的第一项开始,逐个遍历到最后
arr.reduce(function(prev,cur,index,arr){
...
}, init); 或者 arr.reduce(function(prev,cur,index,arr){
...
},);
arr
表示原数组;
prev
表示上一次调用回调时的返回值,或者初始值 init;
cur
表示当前正在处理的数组元素;
index
表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1;
init
表示初始值。
常用的参数只有两个:prev 和 cur。
来看个案例加深下理解
> var arr = [1, 2, 3, 2, 5];
>
> var sum2 = arr.reduce(function(pre, cur, index, array) {
... console.log(pre, cur,index, array)
... return pre+cur
... },10)
10 1 0 [ 1, 2, 3, 2, 5 ]
11 2 1 [ 1, 2, 3, 2, 5 ]
13 3 2 [ 1, 2, 3, 2, 5 ]
16 2 3 [ 1, 2, 3, 2, 5 ]
18 5 4 [ 1, 2, 3, 2, 5 ] > sum2
23
>
1、数组求和,求乘积
var arr = [1, 2, 3, 4];
var sum = arr.reduce((x,y)=>x+y)
var mul = arr.reduce((x,y)=>x*y)
console.log( sum ); //求和,10
console.log( mul ); //求乘积,24
2、计算数组中每个元素出现的次数
let names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice']; let nameNum = names.reduce((pre,cur)=>{
if(cur in pre){
pre[cur]++
}else{
pre[cur] = 1
}
return pre
},{})
console.log(nameNum); //{Alice: 2, Bob: 1, Tiff: 1, Bruce: 1}
3、数组去重
> arr3
[
1, 2, 3, 5,
2, 3, 6
]
> var arr5 = arr3.reduce((pre,cur)=>{
... if(!pre.includes(cur)){
..... console.log('pre',pre,'cur',cur)
..... return pre.concat(cur)
..... }else{
..... console.log('else pre',pre)
..... return pre
..... }
... },[])
pre [] cur 1
pre [ 1 ] cur 2
pre [ 1, 2 ] cur 3
pre [ 1, 2, 3 ] cur 5
else pre [ 1, 2, 3, 5 ]
else pre [ 1, 2, 3, 5 ]
pre [ 1, 2, 3, 5 ] cur 6
>
> arr5
[ 1, 2, 3, 5, 6 ] // 最终去重后的数组
>
4、将二维数组转化为一维
let arr = [[0, 1], [2, 3], [4, 5]]
let newArr = arr.reduce((pre,cur)=>{
return pre.concat(cur)
},[])
console.log(newArr); // [0, 1, 2, 3, 4, 5]
5、将多维数组转化为一维
let arr = [[0, 1], [2, 3], [4,[5,6,7]]]
const newArr = function(arr){
return arr.reduce((pre,cur)=>pre.concat(Array.isArray(cur)?newArr(cur):cur),[])
}
console.log(newArr(arr)); //[0, 1, 2, 3, 4, 5, 6, 7]
6、对象里的属性求和
var result = [
{
subject: 'math',
score: 10
},
{
subject: 'chinese',
score: 20
},
{
subject: 'english',
score: 30
}
]; var sum = result.reduce(function(prev, cur) {
return cur.score + prev;
}, 0);
console.log(sum) //60
28、reduceRight()
不会改变原数组,迭代数组的所有项,从数组的最后一项开始,向前遍历到第一项
var arr = [1, 2, 3, 2, 5];
> var sum3 = arr.reduceRight(function(pre, cur, index, array) {
... console.log(pre, cur,index, array)
... return pre+cur
... },10)
10 5 4 [ 1, 2, 3, 2, 5 ]
15 2 3 [ 1, 2, 3, 2, 5 ]
17 3 2 [ 1, 2, 3, 2, 5 ]
20 2 1 [ 1, 2, 3, 2, 5 ]
22 1 0 [ 1, 2, 3, 2, 5 ] > sum3
23
>
好了常用的基本是这些了
JS 数组常用操作全集的更多相关文章
- js,jQuery数组常用操作小结
一.js中数组常用操作小结 (1) shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift() ...
- js数组的操作及数组与字符串的相互转化
数组与字符串的相互转化 <script type="text/javascript">var obj="new1abcdefg".replace(/ ...
- js 数组的操作
js数组的操作 用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多,自以为js高手的自己居然无从下手,一 ...
- js数组的操作 Full
js数组的操作 用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多,自以为js高手的自己居然无从下手,一 ...
- Linux Shell数组常用操作详解
Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) declare -a array array=( ) 数组用小括号括起,数组元 ...
- js数组常用操作方法小结(增加,删除,合并,分割等)
本文实例总结了js数组常用操作方法.分享给大家供大家参考,具体如下: var arr = [1, 2, 3, 4, 5]; //删除并返回数组中第一个元素 var theFirst = arr.shi ...
- 数组toString()方法,数组常用操作
int[] arr ={1,2,3,4,5}; String arrString = Arrays.toString(arr); //输出[I@7150bd4d System.out.println( ...
- 快学Scala 第三课 (定长数组,变长数组, 数组循环, 数组转换, 数组常用操作)
定长数组定义: val ar = new Array[Int](10) val arr = Array("aa", "bb") 定长数组赋值: arr(0) = ...
- js 的数组怎么push一个对象. Js数组的操作push,pop,shift,unshift JavaScrip
push()函数用于向当前数组的添加一个或多个元素,并返回新的数组长度.新的元素将会依次添加到数组的末尾. 该函数属于Array对象,所有主流浏览器均支持该函数. 语法 array.push( ite ...
- js 数组常用的操作函数整理
平时多做企业应用开发,抱着实用为主,对前端技术理解得比较肤浅,下面就是肤浅地对 js 数组的属性和方法及对它操作的 jquery 方法做些记录: js 数组是 js 内建的一个非常强大数据类型,由于 ...
随机推荐
- Java笔记第六弹
字符缓冲流 //构造方法 BufferedWriter(Writer out); BufferedReader(Reader in); 相关应用: import java.io.*; public c ...
- 刷爆 LeetCode 双周赛 100,单方面宣布第一题最难
本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 大家好,我是小彭. 上周末是 LeetCode 第 100 场双周赛,你参加了吗?这场周赛整体没有 Hard ...
- 自己动手从零写桌面操作系统GrapeOS系列教程——22.文件系统与FAT16
学习操作系统原理最好的方法是自己写一个简单的操作系统. 新买的硬盘和优盘在第一次使用时需要格式化,有时候还需要分区.这是为什么呢?分区和格式化到底是干啥呢?本讲将为大家解开这些疑惑. 一.文件系统 1 ...
- Java多线程——Thread类
Java多线程--Thread类 Java 中线程实现方式有两种: 继承Thread类,并重写run方法 实现Runnable接口的run方法 Thread类 使用方法:继承Thread类,并重写ru ...
- 如何快速体验ChatGPT-4模型
OpenAI免费版基于Gpt3.5,无法使用最新发布的 GPT-4 模型,必须开通 ChatGPT Plus.但是 OpenAI 不但屏蔽了中国的 IP 地址,连国内的 Visa 信用卡也一同屏蔽,即 ...
- go微服务框架kratos学习笔记二(kratos demo 结构)
目录 api cmd configs dao di model server service 上篇文章go微服务框架kratos学习笔记一(kratos demo)跑了kratos demo 本章来看 ...
- tidyr包几个函数的用法
在R语言中,tidyr主要提供了一个类似Excel中数据透视表 (pivottable)的功能; gather和spread函数将数据在长格式和宽格式之间相互转化,应用在比如稀疏矩阵和稠密矩阵之间的转 ...
- [Nginx/Linux]Nginx从1.15.12平滑升级到1.17.5
1 问题背景 nginx 安全漏洞(CVE-2019-9511) nginx 安全漏洞(CVE-2019-9513) nginx 安全漏洞(CVE-2019-9516) http://www.cnnv ...
- 7.OAuth2
1.近几天在学习OAuth2协议,实际开发中用的最多的就是授权码模式 2.OAuth2的授权码模式流程:首先是用户去访问资源服务器,服务器会给用户一个授权码:用户根据授权码去访问认证服务器,服务器 ...
- MySQL(十二)索引使用的情况分析
索引使用的情况分析 数据准备 创建表student_info.course CREATE TABLE `student_info` ( `id` int NOT NULL AUTO_INCREMENT ...