创建一个数组
- 常规方式:
var myCars = new Array()
myCars[0] = 'Saab'
myCars[1] = 'Volvo'
console.log(myCars[1]) // Volvo
- 简洁方式:
var myCars = new Array('Saab','Volvo','BMW')
console.log(myCars[1]) // Volvo
- 字面表达式:
var myCars = ['Saab','Volvo','BMW']
console.log(myCars[1]) // Volvo
数组属性
- constructor:返回创建数组对象的原型函数。
var myCars = ['Saab','Volvo','BMW']
console.log(myCars.constructor) // ƒ Array() { [native code] }
- 数组的 constructor 属性返回 function Array() { [native code] }
- 数字 constructor 属性返回 function Number() { [native code] }
- 字符串 constructor 属性返回 function String() { [native code] }
- length:返回数组的数目。
var myCars = ['Saab','Volvo','BMW']
console.log(myCars.length) // 3
- prototype:允许向数组对象添加属性或方法。
Array.prototype.myUcase = function() {
for(i = 0; i < this.length; i++){
this[i] = this[i].toUpperCase()
}
}
var fruits = ["Banana", "Orange", "Apple", "Mango"];
console.log(fruits) //['Banana', 'Orange', 'Apple', 'Mango']
fruits.myUcase()
console.log(fruits) //['BANANA', 'ORANGE', 'APPLE', 'MANGO']
数组对象方法
- concat():连接两个或多个数组。不会改变现有的数组,仅仅返回被连接数组的一个副本。
let mike = ['mike','12']
let john = ['john','20']
let hob = ['hob','16']
let total = mike.concat(john, hob)
console.log(total) //['mike', '12', 'john', '20', 'hob', '16']
- join():把数组中的所有元素转换一个字符串。元素是通过指定的分隔符进行分隔的。
let classic = ['唐三藏','孙悟空','猪八戒','沙和尚']
let energy = classic.join(' & ')
console.log(energy) // 唐三藏 & 孙悟空 & 猪八戒 & 沙和尚
- shift():删除数组的第一个元素并返回删除的元素。该方法改变数组的长度。
let classic = ['唐三藏','孙悟空','猪八戒','沙和尚']
let remove = classic.shift()
console.log(remove) // 唐三藏
- pop():删除数组的最后一个元素并返回删除的元素。该方法改变数组的长度。
let classic = ['唐三藏','孙悟空','猪八戒','沙和尚']
let remove = classic.pop()
console.log(remove) // 沙和尚
- unshift():向数组的开头添加一个或多个元素,并返回新的长度。该方法改变数组的长度。
let classic = ['唐三藏','孙悟空','猪八戒','沙和尚']
let preAdd = classic.unshift('白龙马','金箍棒')
console.log(preAdd) //6
console.log(classic) //['白龙马', '金箍棒', '唐三藏', '孙悟空', '猪八戒', '沙和尚']
- push():向数组的末尾添加一个或多个元素,并返回新的长度。该方法改变数组的长度。
let classic = ['唐三藏','孙悟空','猪八戒','沙和尚']
let add = classic.push('白龙马')
console.log(add) //5
console.log(classic) //['唐三藏', '孙悟空', '猪八戒', '沙和尚', '白龙马']
- splice():添加或删除数组中的元素。返回被添加或删除元素的数组。该方法会改变原始数组。
语法:
array.splice(index,howmany,item1,.....,itemX)
- index:必需。规定从何处添加/删除元素。该参数是开始插入和(或)删除的数组元素的下标,必须是数字。
- howmany:可选。规定应该删除多少元素。必须是数字,但可以是 “0”。
如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。- item1, …, itemX:可选。要添加到数组的新元素
数组中添加新元素:
let classic = ['唐三藏','孙悟空','猪八戒','沙和尚']
let add = classic.splice(2,0,'白龙马')
console.log(classic) // ['唐三藏', '孙悟空', '白龙马', '猪八戒', '沙和尚']
移出数组的第三个元素,并在数组第三个位置添加新元素:
let classic = ['唐三藏','孙悟空','猪八戒','沙和尚']
let change = classic.splice(2,1,'白龙马')
console.log(classic) // ['唐三藏', '孙悟空', '白龙马', '沙和尚']
从第三个位置开始删除数组后的两个元素:
let classic = ['唐三藏','孙悟空','猪八戒','沙和尚']
let remove = classic.splice(2,2)
console.log(classic) //['唐三藏', '孙悟空']
- slice():从已有的数组中返回选定的元素。以新的字符串返回被提取的部分。该方法不改变原始数组。
在数组中读取元素:
let classic = ['唐三藏','孙悟空','猪八戒','沙和尚']
let newClassic = classic.slice(1,3)
console.log(newClassic) //['孙悟空', '猪八戒']
使用负值从数组中读取元素:
let classic = ['唐三藏','孙悟空','猪八戒','沙和尚']
let newClassic = classic.slice(-3,-1)
// let newClassic = classic.slice(-3) //['孙悟空', '猪八戒', '沙和尚']
console.log(newClassic) //['孙悟空', '猪八戒']
slice(-3,-1):
截取倒数第三个(包含)到倒数第一个(不包含)的两个元素。
slice(-3):
截取最后三个元素。
截取字符串:
let str = 'www.baidu.com!'
console.log(str.slice(4)) //baidu.com!
console.log(str.slice(4,9)) //baidu
slice(4):
从第 5 个字符开始截取到末尾。
slice(4,10):
从第5 个字符开始截取到第 9 个字符。
- reverse():颠倒数组中元素的顺序。 返回颠倒顺序后的数组。
let classic = ['唐三藏','孙悟空','猪八戒','沙和尚']
let reverse = classic.reverse()
console.log(reverse) //['沙和尚', '猪八戒', '孙悟空', '唐三藏']
- toString():转换数组为字符串。并返回用逗号隔开的结果。
let classic = ['唐三藏','孙悟空','猪八戒','沙和尚']
let str = classic.toString()
console.log(str) //唐三藏,孙悟空,猪八戒,沙和尚
- sort():对数组的元素进行排序。排序顺序可以是字母或数字,并按升序或降序。默认排序顺序为按字母升序。该方法会改变原始数组。
数组排序(字母和升序):
let fruits = ["Banana", "Orange", "Apple", "Mango"]
console.log(fruits.sort()) //['Apple', 'Banana', 'Mango', 'Orange']
数字排序(字母和降序):
let fruits = ["Banana", "Orange", "Apple", "Mango"]
fruits.sort()
console.log(fruits.reverse()) //['Orange', 'Mango', 'Banana', 'Apple']
数字排序(数字和升序):
let points = [40,20,1,5,10,6]
console.log(points.sort(function(a,b){
return a-b})) //[1, 5, 6, 10, 20, 40]
数字降序(数字和降序):
let points = [40,20,1,5,10,6]
console.log(points.sort(function(a,b){
return b-a})) //[40, 20, 10, 6, 5, 1]
- filter():该方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。该方法不会改变原始数组。
let ages = [20, 15, 35, 12]
function checkAdult(age){
return age >= 18
}
let pass = ages.filter(checkAdult)
console.log(pass) //[20, 35]
- map():该方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。map()方法按照原始数组元素顺序依次处理元素。该方法不会改变原始数组。
返回一个数组,数组中元素为原始数组的平方根:
let numbers = [4, 9, 16, 25]
function Fn(){
return numbers.map(Math.sqrt)
}
console.log(Fn()) // [2, 3, 4, 5]
- forEach():用于调用数组的每个元素,并将元素传递给回调函数。 forEach() 对于空数组是不会执行回调函数的。
列出数组的每个元素:
let numbers = [4, 9, 16, 25]
function Fn(item, index){
let result = 'index[' + index + ']:' + item
console.log(result)
}
numbers.forEach(Fn)
/* 输出:
index[0]: 4
index[1]: 9
index[2]: 16
index[3]: 25
*/
使用 return 语句 实现 continue 效果:
let arr = [1,2,3,4,5]
arr.forEach(function (item){
if(item === 3){
return
}
console.log(item) // 1 2 4 5
})
使用 return 语句 实现 break 效果:
let arr = [1,2,3,4,5]
arr.every(function (item){
console.log(item) // 1 2 3
return item !==3
})
- keys():用于从数组创建一个包含数组键的可迭代对象。如果对象是数组返回 true,否则返回 false。
let fruits = ["Banana", "Orange", "Apple"];
let result = fruits.keys()
console.log(result.next().value) // 0
console.log(result.next().value) // 1
console.log(result.next().value) // 2
console.log(result.next().value) // undefined
不积跬步无以至千里 不积小流无以成江海