JS数组对象,特殊的对象

125 阅读2分钟

创建一个数组

  1. let arr = [1,2,3]
  2. let arr = new Array(1,2,3)

ooj let arr = [1,2.3] let arr = new Array(1,2,3)

用字符串创建数组

  1. let str = '1,2,3' str.split(',')
  2. let str2 = '1,2,3' str2.split('')
  3. 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)//全部截取

增删改查

  1. 删除头部的元素 arr.shift()//arr被修改,并返回被删元素

  2. 删除尾部的元素 arr.pop()//arr被修改,并返回被删元素

  3. 删除中间的元素 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('i:{i} : {arr[i]}') } ** 方法二: arr.forEach(function(item,index){ console.log('index:{index}:{item}') }) 等于 `
  1. `
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循环里有continuebreakfor循环是关键字,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)