前言:本文章仅仅适合刚入门的 JS 人员.本文章仅仅自身学习需要,把目前所学已知的用文章记录下来,做一次归纳整理,达到自己理解和加强记忆的目的,如有不对,请联系: 460046653@qq.com

数组(Array)

在 JavaScript 里 Array 对象是构造数组的全局对象.在 JS 里数组也是对象

1. 创建一个数组

1.1 新建

let arr = new Array('apple','xiaomi') //规范写法
let arr1 = ['apple','xiaomi']         //简写

规范写法:需要用到 new 操作符 调用 Array 对象函数来构造一个数组.接收的参数用逗号隔开。

简写:只需要用中括号即可,用逗号隔开每一项

注:当用规范写法时,且参数为数字并参数为一位时,例外

let arr = new Array(3)  //这是声明数组的长度为3,内容为empty(空)
console.log(arr.length) //3   (length是构造时创造给arr自身的属性)

1.2 转化成数组

1.2.1 split():方法使用指定的分隔符将字符串(string)对象分割成字符串数组。

let arr ='1,2,3'.split(',')
console.log(arr)            //["1","2","3"]

let arr1='123'.split('')
console.log(arr1)           //["1","2","3"]

1.2.2 Array.from():方法从一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例


console.log(Array.from('123'))  //类似数组创建一个新的数组。

1.3 合并多个数组.concat()方法

怎么把多个数组合在一起? concat()方法合并多个数组。不改变现有数组,返回一个新数组

let arr1 = ['a','b','c']
let arr2 = [1,2,3]
let arr3 = [4,5,6]
console.log(arr1.concat(arr2)) //["a","b","c",1,2,3]

console.log(arr1.concat(arr2,arr3)) //["a","b","c",1,2,3,4,5,6]

1.4 拷贝一个数组.slice()方法

slice() 方法返回一个新的数组对象,不会改变原数组.接收两个参数 begin 和 end(包括 begin,不包括 end))。

let arr = [1,2,3,4,5,6]

console.log(arr.slice(2,4)) //[3,4]
console.log(arr.slice(0))   //[1,2,3,4,5,6]

第一个参数是开始,第二个是结束。当只有一个参数时,end 被省略,slice 会一直提取到原数组末尾

2. 删除数组中的元素

在一个数组当中,要么删开头要么删尾部,和数组的中间.

shift():方法删除数组的第一个元素,返回被删除的值。如果数组为空返回 undefined。并且改变原数组的长度

let arr = [1,2,3,4,5]
console.log(arr)           //[1,2,3,4,5]
console.log(arr.shift());  // 1
console.log(arr)           //[2.3.4.5]

pop():方法删除数组最后一个元素,返回被删除的值.如果数组为空返回 undefined.并且改变原数组的长度

let arr = [1,2,3,4,5]

console.log(arr)        //[1,2,3,4,5]
console.log(arr.pop())  //5
console.log(arr)        //[1,2,3,4]

splice():方法通过删除或替换现有元素或者原地添加新的元素来修改数组。此方法会改变原数组的长度(当前实例只是删除)

let arr = [1,2,3,4,5]

console.log(arr)              //[1,2,3,4,5]
console.log(arr.splice(2,1)); //[3] 参数1是开始.参数2是删几个
console.log(arr)              //[1,2,4,5]

3. 查看元素

3.1 查看所有元素

3.1.1 for 语句

for 是一个循环,数组的下标有规律可循。可逐步循环出数组中的每个元素

let arr = [1,2,3,4,5]

for(let i=0;i<arr.length;i++){
  console.log(`${i}:${arr[i]}`)     // ${会认为是一个变量}
}
/*输出:
0:1
1:2
2:3
3:4
4:5
undefined
*/

3.1.2 forEach()方法

forEach():方法对数组的每个元素执行一次提供的函数

let arr = [1,2,3,4,5]
arr.forEach(function(value,index){
  console.log(`${index}:${value}`);
})
/*输出
0:1
1:2
2:3
3:4
4:5
undefined
*/

forEach()方法会循环数组并且执行接收的函数,函数第一个参数是当前元素,第二个参数是当前元素的索引(下标)

自己写个 forEach

输出元素 value


function forEach(array,fn){
  for(let i=0;i<array.length;i++){
    fn(array[i])                    //调用参数二函数
  }
}

forEach([1,2,3,4,5],function(arrayValue){
  console.log(arrayValue);          //输出元素的value
})

输出元素 index 和 value

function forEach(array,fn){
  for(let i=0;i<array.length;i++){
    fn(array[i],i)                   //调用参数二函数
  }
}

forEach([1,2,3,4,5],function(arrayValue,arrayIndex){
  console.log(`${arrayIndex}:${arrayValue}`)//输出元素的value和index
})

3.2 查看单个元素

通过下标

let arr = [1,2,3,4,5]

console.log(arr[0])  //1

注:下标从 0 开始

3.2.1 indexOf():方法查看某个元素是否在数组里,存在返回索引,否则返回-1

let arr = [1,2,3,4,5]

console.log(arr.indexOf(2))  //1

3.2.2 find():方法返回数组中的元素满足测试函数的第一个元素的值,否返回 undefined

let arr = [1,2,3,4,5]
// 元素的值为偶数返回值
console.log(arr.find(function(element){
  return element%2===0          //2
}))

//函数简写为箭头函数
console.log(arr.find(element => element%2===0))   //2

3.2.3 findIdenx:方法返回数组中的元素满足测试函数的第一个元素的索引,否返回 undefined

let arr = [1,2,3,4,5]
//元素的值为偶数返回索引
console.log(arr.findIndex(function(element){
  return element%2===0          //1
}))
//函数简写为箭头函数
console.log(arr.findIndex(element => element%2===0))  //1

4. 增加数组中的元素

跟删除大致相同,要么在开头添加元素,要么在尾部添加元素,或者在中间添加元素

4.1 unshift():方法将一个或多个元素添加到数组的开头,并返回该数组的新长度

let arr = [3,4,5]

console.log(arr)              //[3,4,5]
console.log(arr.unshift(1,2)) //5
console.log(arr)              //[1,2,3,4,5]

4.2 push(): 方法将一个或多个元素添加到数组的尾部,并返回数组的新长度

let arr = [1,2,3]

console.log(arr)            //[1,2,3]
console.log(arr.push(4,5))  //5
console.log(arr)            //[1,2,3,4,5]

4.3 splice():方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返会被修改的内容。会改变原数组

let arr = [1,2,5]

console.log(arr)                  //[1,2,5]
console.log(arr.splice(2,0,3,4))
//[].在索引2处删除0个元素并且添加3和4.没有修改内容,因此返回空数组

console.log(arr)                  //[1,2,3,4,5]

5. 修改数组元素的顺序

5.1 reverse():方法会把元素的位置颠倒,第一个变成最后一个,最后一个变成第一个。并返回该数组,该方法会改变原数组

let arr = [1,2,3,4,5]

console.log(arr)            //[1,2,3,4,5]
console.log(arr.reverse())  //[5,4,3,2,1]

5.2 sort():方法默认排序是在将元素转换为字符串,然后比较每个字符串的第一个大小(你可以理解第一个字符,谁小谁在前).会改变原数组元素的顺序

let arr = ['c','b','a','d']

console.log(arr.sort())   //[a,b,c,d]


let arr = [10,20,100,300,2000]

console.log(arr.sort())   //[10,100,20,2000,300]

不过呢,它可以接收一个函数,改变升序还是降序,我们来提供一个函数。

函数接收两个参数:如果

(a,b) 小于 0 a 在 b 前面,

(a,b) 等于 0 位置不变,

(a,b) 大于 0 b 在 a 的前面

let arr = [10,20,1000,30000,200]

console.log(arr.sort((a,b) => a>b?-1:1))  //[30000,1000,200,20,10]
console.log(arr.sort((a,b) => a>b?1:-1))  //[10,20,200,1000,30000]

6. 数组变换

6.1 改变数组每个元素

map():方法创建一个新数组,其结果是该数组每个元素都调用一个提供的函数返回的结果。不会改变原数组

let arr =[1,2,4,6]

console.log(arr.map(function (x){
  return x*2;
}))   //[2,4,8,12]

console.log(arr)  //[1,2,4,6]

6.2 提取数组中满足条件的元素

filter():方法创建一个新数组,其包含通过了所提供函数实现的测试的所有元素 .不会改变原数组

let arr =[1,2,3,4,5,6,7,8,9,10]


console.log(arr.filter(function(x){
  return x%2===0;
}))           //[2,4,6,8,10]
console.log(arr)  //[1,2,3,4,5,6,7,8,9,10]

6.3 对整体数组中的元素做某些操作

reduce():方法对数组中每个元素执行一个由你提供的 reduce 函数(升序执行),将其结果汇总为单个返回值.不会改变原数组

let arr = [5,5,5,5]

console.log(arr.reduce(function (arrSum,arrValue){
  return arrSum+=arrValue
},0))     //20
console.log(arr)      //[5,5,5,5]

reduce()方法接收两个参数:函数(函数接送四个参数:累加器,当前元素值,当前元素索引,自身数组),初始值。上面例子初始值为 0.函数值只调用了两个参数