文章目录

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 数组常用操作全集的更多相关文章

  1. js,jQuery数组常用操作小结

    一.js中数组常用操作小结 (1) shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift() ...

  2. js数组的操作及数组与字符串的相互转化

    数组与字符串的相互转化 <script type="text/javascript">var obj="new1abcdefg".replace(/ ...

  3. js 数组的操作

    js数组的操作 用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多,自以为js高手的自己居然无从下手,一 ...

  4. js数组的操作 Full

    js数组的操作 用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多,自以为js高手的自己居然无从下手,一 ...

  5. Linux Shell数组常用操作详解

    Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) declare -a array array=( ) 数组用小括号括起,数组元 ...

  6. js数组常用操作方法小结(增加,删除,合并,分割等)

    本文实例总结了js数组常用操作方法.分享给大家供大家参考,具体如下: var arr = [1, 2, 3, 4, 5]; //删除并返回数组中第一个元素 var theFirst = arr.shi ...

  7. 数组toString()方法,数组常用操作

    int[] arr ={1,2,3,4,5}; String arrString = Arrays.toString(arr); //输出[I@7150bd4d System.out.println( ...

  8. 快学Scala 第三课 (定长数组,变长数组, 数组循环, 数组转换, 数组常用操作)

    定长数组定义: val ar = new Array[Int](10) val arr = Array("aa", "bb") 定长数组赋值: arr(0) = ...

  9. js 的数组怎么push一个对象. Js数组的操作push,pop,shift,unshift JavaScrip

    push()函数用于向当前数组的添加一个或多个元素,并返回新的数组长度.新的元素将会依次添加到数组的末尾. 该函数属于Array对象,所有主流浏览器均支持该函数. 语法 array.push( ite ...

  10. js 数组常用的操作函数整理

    平时多做企业应用开发,抱着实用为主,对前端技术理解得比较肤浅,下面就是肤浅地对 js 数组的属性和方法及对它操作的 jquery 方法做些记录: js 数组是 js 内建的一个非常强大数据类型,由于 ...

随机推荐

  1. Spring--bean管理(easy)

    bean作用范围 利用同一个BookDao设置出来两个不同的对象,得到相同的地址: (默认为单例,即表现为同一个地址) 要是想要得到不同的地址,就需要我们在接口实现类的上面加上这样一个注解:(双例) ...

  2. 自己动手从零写桌面操作系统GrapeOS系列教程——17.用汇编语言清空屏幕

    学习操作系统原理最好的方法是自己写一个简单的操作系统. 在QEMU中会默认输出一些字符,有时候会干扰我们自己输出的字符.一个比较好的办法是向将屏幕清空,再输出我们想要输出的字符.下面就来学习如何清空屏 ...

  3. 【LeetCode997】【哈希表】[Py/C#/Scala/Elixir/Kotlin/Rust/Ruby/Swift/PHP/Java/Go/C++/TS/Erlang/Racket/Dart] 一道统计入度出度的简单题目

    可以看到,一般而言,Python最接近"想思路时写的伪代码" 目录 解题思路 代码 python3 C# scala elixir kotlin rust ruby swift p ...

  4. Out Of Memory 案例

    案例一:老年代内存泄漏 某晚八点收到报警邮件,一看是OOM: ​ 打开 hickwall查看指标:JVM各项指标中 老年代在持续增长(从上次发布10月30号到11月10号的 12天 一直在增长,存在内 ...

  5. 怎么用ChatGPT写代码,ChatGPT怎么改代码修BUG

    ChatGPT 是一个自然语言处理模型,可以模拟人类语言生成文本,可以用于写代码和修复bug.在本文中,我们将介绍如何使用 ChatGPT 写代码和修bug. 怎么用ChatGPT写代码? 虽然 Ch ...

  6. 自己定义jquery插件轮播图

    轮播图-html <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  7. .net6的IIS发布部署

    1.打开控制面板,打开程序 2.点击启动或关闭windows功能 3.在其中选择要设置的IIS功能 4.重启IIS服务 5.发布项目 6.在开始菜单搜索IIS,点击IIS管理器 7.右击网站,点击添加 ...

  8. flask-wtfwkfom使用

    我们在使用flask框架来搭建自己的博客,只要是设涉及到表单相关,必然会想起Flask-WTF与WTForms.对于flask初学者来说,比较容易混淆两者.今天想来一一解释两者的用法. Flask-W ...

  9. pandas之统计函数

    Pandas 的本质是统计学原理在计算机领域的一种应用实现,通过编程的方式达到分析.描述数据的目的.而统计函数则是统计学中用于计算和分析数据的一种工具.在数据分析的过程中,使用统计函数有助于我们理解和 ...

  10. [PKM] 个人知识管理

    1 个人知识管理的需求 1.1 背景 随着信息大爆炸,碎片化的知识越来越多,原来中小学阶段在学校中习得的.传统的.基于纸质笔记的知识管理方式已不能满足当前的诉求. 传统的基于纸质笔记的知识管理方式 工 ...