创建一个数组
- let arr = [1,2,3]
- let arr = new Array(1,2,3)
ooj let arr = [1,2.3] let arr = new Array(1,2,3)
用字符串创建数组
- let str = '1,2,3' str.split(',')
- let str2 = '1,2,3' str2.split('')
- Array.from('1,2,3')把不是数组的东西变成数组, 必须有0,1,2,3下标,还要有length属性。 例如:Array.from({0:'a',1:'b',2:'c',3:'d',length:4}) 若length写错为2,则得出["a","b"]
伪数组
let divList = document.querySelector('div') 伪数组的原型链中并没有数组的原型,就是没有真正数组的那些属性;
合并数组
- let arr3 = [3,3,3]
- let arr4 = [4,4,4,4]
- arr3.concat(arr4) 结果为[3,3,3,4,4,4,4]
截取数组
- let arr5 = [1,2,3,4,5,6,7,8,9]
- arr5.slice(2)结果为[3,4,5,6,7,8,9] arr1.slice(1)//从第二个元素开始 arr1.slice(0)//全部截取
增删改查
-
删除头部的元素 arr.shift()//arr被修改,并返回被删元素
-
删除尾部的元素 arr.pop()//arr被修改,并返回被删元素
-
删除中间的元素 arr.splice(index,1)//删除index(下标)的一个元素(从index的位置开始删,后面的是个数) arr.splice(index,1,'x')//并在删除位置添加'x' arr.splice(index,1,'x','y')//并在删除位置添加'x','y'
查看所有元素
- let arr = [1,2,3,4,5];
- arr.x = 'x'
- Object.keys(arr)
- 得出:["0","1","2","3","4","x"]
- 上面得出的是属性名
- Object.values(arr)
- [1,2,3,4,5,'x']
- 上面得出的是属性值 上面的方法适合对象,下面是数组最好的方法: for (let i = 0;i < arr.length; i++){ consle.log(i) } 得出属性名(keys)
- 0
- 1
- 2
- 3
- 4 **for (let i = 0; i< arr.length; i++){ consle.log('{arr[i]}') } ** 方法二: arr.forEach(function(item,index){ console.log('{item}') }) 等于 `
- `
function forEach(array,fn){
for(let i=0;i<array.length;i++){
fn(array[i],i,array)
}
}
forEach(['a','b','c'],function(x,y,z){console.log(x,y,z)})
得出
VM900:1 a 0 (3) ["a", "b", "c"]
VM900:1 b 1 (3) ["a", "b", "c"]
VM900:1 c 2 (3) ["a", "b", "c"]
## for循环和forEach,有什么区别
for循环里有continue和break,for循环是关键字,forEach是普通函数;
for是块元素,forEach是函数;
```js
for(let i = 0;i< arr.length;i++){
console.log(`${i} : ${arr[i]}`)
if(i===3){break;}
}
结果
0 : 1
1 : 2
2 : 3
3 : 4
for循环可以从任何位置终止或继续,但是forEach只能从头到尾
查看单个属性
let arr=[111,222,333] arr[0] 得出111
索引越界
当有提示说Cannot read property'toString'of undefined 说明越界了
查找某个元素是否在数组里
arr
增加数组中的元素
在尾部加元素 arr.push(newItem)//修改arr,返回新长度 arr.push(item1,item2)//修改arr,返回新长度
let arr = [1,2,3,4,5,6,7,8]
arr.push(9)
或者arr.push(a,b,c)
``
在头部加元素
arr.unshift(newItem)//修改arr,返回新长度
arr.unshift(item1.item2)//修改arr,返回新长度
在中间加元素
arr.splice(index,0,'x')//在index处插入'x'
arr.splice(index,0,'x','y')
### 反转顺序
arr.reverse()
```js
反转数组
let arr = [1,2,3,4,5,6,7,8]
arr.reverse()
得出[8,7,6,5,4,3,2,1]
反转字符串
var s = 'abcde'
s.split('')//先把字符串变成数组
得出["a","b","c","d","e"]
s.split('').reverse()
得出["e","d","c","b","a"]
s.split('').reverse().join('')//再把数组变成字符串
得出"edcba"
乱序怎么排序
注意:我们只需要判断哪个大,那个小,排序的事情不用管,交给函数。
let arr = [5,2,4,3,1]
法一:
arr.sort()
[1,2,3,4,5]
法二:
arr.sort(function(a,b){
if(a>b){
return 1
}else if(a===b){
return 0}
else{
return -1
}
})
得出结果[1,2,3,4,5]
倒序排列
arr.sort(function(a,b){
if(a>b){
return -1
}else if(a===b){
return 0}
else{
return 1
}
})
得出结果[5,4,3,2,1]
再举一个复杂数组的例子
let arr = [
{name:'小明',score:99},{name:'小红',score:95},{name:'大黄',score:100}]
arr.sort(function(a,b){
if(a.score>b.score){return 1}
else if(a.score===b.score){return 0}
else{return -1}
})
得出
(3) [{…}, {…}, {…}]
0: {name: "小红", score: 95}
1: {name: "小明", score: 99}
2: {name: "大黄", score: 100}
length: 3
也可以这样简单写
arr.sort((a,b) => a.score-b.score)