资讯专栏INFORMATION COLUMN

js数组笔记

JinB / 3403人阅读

摘要:一定义数组是按次序排列的一组值。整个数组用方括号表示,数组的值用,分割数组的数据可以是任何类型。原数组会会变化,截取的部分自动为一个数组返回。否则,返回函数参数数组当前项的值数组当前项的索引数组对象本身返回值举个例子不会改变原数组

一、定义

数组(array)是按次序排列的一组值。每个值的位置都有编号(从0开始)。整个数组用方括号表示,数组的值用","分割;数组的数据可以是任何类型。

本质上,数组属于一种特殊的对象,对应的键名也是字符串"0", "1", "2"。。。。

var arr = ["a", "b", "c"];

Object.keys(arr)
// ["0", "1", "2"]
二、获取数组值

只能通过arr[0]的方式来获取数组值
因为多带带的数值不能作为标识符,arr.0的写法不合法的。

var arr = [3, 4, 5, 6]
console.log(arr[3])      //6
console.log(arr[4])      //undefined
三、数组的基础操作 1、length属性

1)可以直接设置length长度,没有具体数值的数组值,会以空位填充

2)人为设置length小于当前数组长度,超过length长度的数组的成员会被删除
清空数组的方式,设置arr.length =0

var arr = [ "a", "b", "c" ];
arr.length // 3

arr.length = 2;
arr // ["a", "b"]
2、in 运算符

1) 运算符in用于检查某个键名是否存在,适用于对象,也适用于数组。

var arr = [ "a", "b", "c" ];
2 in arr  // true
"2" in arr // true
4 in arr // false

2) 如果数组的某个位置是空位,in运算符返回false

var arr = [];
arr[100] = "a";

100 in arr // true
1 in arr // false
3、push (在数组最后再添加一个元素)
arr.push("jirengu")      //再数组最后添加一个元素
console.log(arr)         // [3, 4, 5, 6, "hello", "jirengu"]
4、pop (删除数组最后一位并返回数值)
var value = arr.pop()    //把数组最后一位弹出来,返回 
console.log(value)       //"jirengu"
5、unshift (在数组第一位插入一个数值)
arr.unshift("ruoyu")     //在数组第一位新增
console.log(arr)         //["ruoyu", 3, 4, 5, 6, "hello"]
6、shift(删除数组第一位,并返回被删除值)
var value2 = arr.shift() //把数组第一位拿出来返回,数组发生变化
console.log(value2)      // "ruoyu"
7、splice(替换数组的一部分,并把替换内容作为新数组返回)

var arr2 = arr.splice(1, 2)
splice的第一个参数:截断开始的下标;splice的第二个参数:截断长度。之后的参数为替换的内容。原数组会会变化,截取的部分自动为一个数组返回。
用途一:截断数组

arr= [3, 4, 5, 6, "hello"]

var arr2 = arr.splice(1, 2)         //从下标为1的元素开始,拿出来2个元素作为一个数组返回,原数组发生改变
console.log(arr)         // [3, 6, "hello"]
console.log(arr2)        //  [4, 5]

用途二:替换数组内容

arr= [3, 6, "hello"]
arr.splice(1, 0, 8,9)    //从下标为1的位置(元素6)开始,删除0个,新增两个元素(在6前面新增8,9)
console.log(arr)         //[3, 8, 9, 6, "hello"]
7、slice(截取数组)

slice的第一个参数:开始截断的下标;slice的第二个参数:结束截断数组的下标(不包括这个数)。原数组不会变化

arr=[3, 8, 9, 6, "hello"]
var arr3 = arr.slice(2,3)           //从 arr 下标为2开始,到下标为3结束(不包括3),做为新数组,原数组不变
console.log(arr3)       // [9]
console.log(arr)        //[3, 8, 9, 6, "hello"]
8、join("-")(用某个符号连接数组所有的值,生成字符串)

原数组不变

arr=[3, 8, 9, 6, "hello"]

var str = arr.join("-")
console.log(str)        // "3-8-9-6-hello"
console.log(arr.join(",")); //"3,8,9,6,hello"
9、arr.concat(array) (连接两个数组)

concat方法用于拼接数组,a.concat(b)返回一个a和b共同组成的新数组。
不会修改任何一个原始数组

var a = [1,2,3,4,5];
var b = [6,7,8,9];
console.log(a.concat(b));//[1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log(a); //[1, 2, 3, 4, 5]
console.log(b); //[6, 7, 8, 9]
10、reverse()数组逆序

用于将数组逆序,它会修改原数组

var a = [1,2,3,4,5];
a.reverse();
console.log(a); //[5, 4, 3, 2, 1]
11、sort(对数组进行排序)

1)没有参数,默认根据字符串Unicode码来排序。

var a=[5,4,3,2,1]
a.sort()
console.log(a) //[1, 2, 3, 4, 5]
var a=[7,8,9,10,11]
a.sort()
console.log(a) //[10, 11, 7, 8, 9]

2)可以自定义一个排序方式,如arr.sort([compareFunction]),比较规则如下

如果 compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 之前;

如果 compareFunction(a, b) 等于 0 , a 和 b 的相对位置不变

如果 compareFunction(a, b) 大于 0 , b 会被排列到 a 之前

或者是按照true和false来判断,true的话就会调换位置。
3)原数组会改变

var a = [7,8,9,10,11]

    a.sort(function(v1,v2){
        return v1-v2
    })
    console.log(a) //[7, 8, 9, 10, 11]

    var users = [
        {
            name: "aaa",
            age: 21
        },
        {
            name: "baa",
            age: 18
        },
        {
            name: "abc",
            age: 24
        }
    ]
    // 按age 从小到大排序

    var sortByAge = users.sort(function(v1, v2){
        return  v1.age > v2.age
    })

  // 按name从大到小排序
    var sortByName = users.sort(function(v1, v2){
        return  v1.name > v2.name
    })
四:ES5 数组拓展(注意驼峰写法) 1、Array.isArray(arr)判断是不是数组

这是Array对象的一个静态函数,用来判断一个对象是不是数组

var a = [];
var b = new Date();
console.log(Array.isArray(a)); //true
console.log(Array.isArray(b)); //false
2、indexOf(element)/ lastIndexOf(element)寻找数组是否有对应的内容

这两个方法用于查找数组内指定元素位置,查找到第一个后返回其索引,没有查找到返回-1,indexOf从头至尾搜索,lastIndexOf反向搜索。

var arr =[2,3,5,7,3,9]
arr.indexOf(3) //1
3、forEach(function(element,index,arry))遍历数组,对数组的每个元素执行一次提供的函数

1)原理:遍历数组,参数为一个回调callback函数,回调函数有三个参数:

element:数组当前项的值

index:数组当前项的索引(可选)

array:数组对象本身(可选)

thisArg:当执行回调 函数时用作this的值。如果给forEach传递了thisArg参数,当调用时,它将被传给callback函数,作为它的this值。否则,将会传入 undefined 作为它的this值(可选,爱用不用)

2)注意:

数组内已删除或者未初始化的项不会遍历到

返回值是:undefined,原数组会改变,这个和map和reduce不一样

3)举个例子

var arr=[1,2,5,6,8]
arr.forEach(function(e,i,arr){
arr[i]=e*e
})
console.log(arr)// [1, 4, 25, 36, 64]
4、map(function(element,index,arry))遍历数组,对数组的每个值执行函数操作,并把结果返回新数组

1)原理:遍历数组,对函数的每个值执行回调函数,返回值组成一个新数组。原数组不变
2)函数参数:

element:数组当前项的值

index:数组当前项的索引(可选)

array:数组对象本身(可选)

thisArg:执行 callback 函数时使用的this 值(可选)

3)返回值:
一个新数组,每个元素都是回调函数的结果

4)举个例子

var obj2 =[{ key:1,value:2},
          { key:4,value:8},
          { key:5,value:78}]
var array= obj2.map(function(obj){
var arr2=[]
 arr2[obj.key] =obj.value
return arr2})})        
          
5、filter(function(element,index,arry))遍历数组,对数组每一个元素执行callback函数,并将满足条件的值返回新数组

1)原理:遍历数组,对数组每一个元素执行callback函数,并将满足条件的值返回新数组。原数组不变
2)函数参数:

element:数组当前项的值

index:数组当前项的索引(可选)

array:数组对象本身(可选)

thisArg:执行 callback 函数时使用的this 值(可选)

3)返回值:
一个新的通过测试的元素的集合的数组,如果没有通过测试则返回空数组

4)举个例子

var a =[2,3,4,5,7,9,6]
console.log(a.filter(function(e){
return e%2==0
}))  //[2, 4, 6]

参考文献

6、reduce(function(v1, v2), value)遍历数组,对数组的值依次两两执行回调函数,将两个数组值合成一个值,reduce从索引最小值开始

1)原理:对累计器和数组中的每个元素(从左到右)应用一个函数,将其简化为单个值。
2)函数参数:

currentValue:数组中正在处理的元素

index:数组当前项的索引(可选)

array:数组对象本身(可选)

Accumulator (累计器):累计器累计回调的返回值; 它是上一次调用回调时返回的累积值,或initialValue(初始值)

initialValue(初始值)(可选)作为第一次调用 callback函数时的第一个参数的值。 如果没有提供初始值,则将使用数组中的第一个元素。在没有初始值的空数组上调用 reduce 将报错

3)返回值:
函数累计处理的结果

4)举个例子

var a = [1, 2, 3, 4, 5, 6]
var sumvalue= a.reduce(function(v1,v2){
return v1+v2})

将二维数组转化为一维

var flattened = [[0, 1], [2, 3], [4, 5]].reduce(
  function(a, b) {
    return a.concat(b);
  },
  []
);
// flattened is [0, 1, 2, 3, 4, 5]

mdn文档
5)要点
回调函数第一次执行时,accumulator 和currentValue的取值有两种情况:如果调用reduce()时提供了initialValue,accumulator取值为initialValue,currentValue取数组中的第一个值;如果没有提供 initialValue,那么accumulator取数组中的第一个值,currentValue取数组中的第二个值

7、every(function(element, index, array))测试数组的所有元素是否都通过了指定函数的测试

1)原理:
every 方法为数组中的每个元素执行一次 callback 函数,直到它找到一个使 callback 返回 false(表示可转换为布尔值 false 的值)的元素。如果发现了一个这样的元素,every 方法将会立即返回 false。否则,callback 为每一个元素返回 true,every 就会返回 true
2)函数参数:

element:数组当前项的值

index:数组当前项的索引(可选)

array:数组对象本身(可选)

thisArg:执行 callback 函数时使用的this 值(可选)

3)返回值:
true/false

4)举个例子

var a = [1, 2, 3, 4, 5, 6]

console.log(a.every(function(e){
return e>0}))  //true

5)every不会改变原数组 mdn

8、some(function(element, index, array))测试数组中的某些元素是否通过由提供的函数实现的测试

1)原理:
some 为数组中的每一个元素执行一次 callback 函数,直到找到一个使得 callback 返回一个“真值”(即可转换为布尔值 true 的值)。如果找到了这样一个值,some 将会立即返回 true。否则,some 返回 false
2)函数参数:

element:数组当前项的值

index:数组当前项的索引

array:数组对象本身

3)返回值:
true/false

4)举个例子

var a = [1, 2, 3, 4, 5, 6]

console.log(a.some(function(e){
return e>5}))  //true

5)some不会改变原数组

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/108806.html

相关文章

  • JS学习第十天笔记 Array类型

    摘要:只有满足才返回,否则返回。专门用于筛选出数组中符合函数判断条件的元素组成的心数组。专门用于对原数组中每个元素执行相同的函数对象规定的操作。并归方法将数组从左向右迭代。 Array类型 数组的常见方法 检测数组 如何确定当前是一个数组,JS提供了以下几种方式1.typeof无法检测数组对象:typrof[]返回object2.instanceof:[]instanceof Array返回...

    Barrior 评论0 收藏0
  • 工作笔记1:将JS数组转换成json

    摘要:背景这几天调到后台组,搞后台开发,开发中碰到页面拼装到后台的如下所示多选的数据是数组的方式,手动将数组转换成串又嫌麻烦,后来发现这一神器,只需要一行代码,就能把数组转成。 本文仅作为个人学习总结记录使用!能力有限,难免会有疏漏和错误,还望指出。共同进步。 背景 这几天调到后台组,搞web后台开发,开发中碰到页面拼装JSON到后台的CASE 如下所示:showImg(http://se...

    ymyang 评论0 收藏0
  • JS笔记!Map 与其他数据结构的互相转换

    摘要:与其他数据结构的互相转换仅作为一个学习笔记供往后翻阅转为数组转为数组最方便的方法,就是使用扩展运算符。对象转为转为转为要区分两种情况。转为转为,正常情况下,所有键名都是字符串。这往往是数组转为的逆操作。 Map 与其他数据结构的互相转换 PS:仅作为一个学习笔记供往后翻阅! (1)Map 转为数组Map 转为数组最方便的方法,就是使用扩展运算符(...)。 const myMap = ...

    Jenny_Tong 评论0 收藏0
  • JS迭代器模式《JavaScript设计模式与开发实践》阅读笔记

    摘要:但实际中,内部迭代器和外部迭代器两者并无优劣。迭代器并不只迭代数组迭代器模式不仅能迭代数组,还可以迭代一些类数组对象。晚安了,参考设计模式与开发实践曾探本文作者本文链接迭代器模式设计模式与开发实践阅读笔记 迭代器模式:一个相对简单的模式,目前绝大多数语言都内置了迭代器,以至于大家都不觉得这是一种设计模式 迭代器模式 迭代器模式指提供一种方法访问一个聚合对象中的各个元素,而又不需要暴露该...

    djfml 评论0 收藏0
  • JS实现KeyboardNav(学习笔记)一

    摘要:取正值时,阴影扩大取负值时,阴影收缩。默认为,此时阴影与元素同样大。如果没有指定,则由浏览器决定通常是的值,不过目前取透明。 纯JS实现KeyboardNav(学习笔记)一 这篇博客只是自己的学习笔记,供日后复习所用,没有经过精心排版,也没有按逻辑编写 GitHub项目源码 预览地址 最终效果 showImg(https://sfault-image.b0.upaiyun.com/...

    source 评论0 收藏0
  • JS实现KeyboardNav(学习笔记)一

    摘要:取正值时,阴影扩大取负值时,阴影收缩。默认为,此时阴影与元素同样大。如果没有指定,则由浏览器决定通常是的值,不过目前取透明。 纯JS实现KeyboardNav(学习笔记)一 这篇博客只是自己的学习笔记,供日后复习所用,没有经过精心排版,也没有按逻辑编写 GitHub项目源码 预览地址 最终效果 showImg(https://sfault-image.b0.upaiyun.com/...

    lscho 评论0 收藏0

发表评论

0条评论

JinB

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<