数组属性
- constructor:返回创建数据对象的原型函数
- length:设置或返回数组中元素的个数(也可以用来显示数组中的个数/置空数组)
- prototype:允许向数组对象添加属性或方法
- 实例
Array.prototype.toHump = function () {//在数组的原型上定义一个驼峰方法
this.forEach((item, index) => {
if (item.includes('-')) {
this[index] = item.replace(/-/g, function (match, p1, p2, p3, offset, string) {
return item[p1 + 1].toLocaleUpperCase();
})
}
})
}
let arr = ['header', 'header-item', 'header-item1-item2'];
arr.toHump();
console.log(arr)//["header", "headerIitem", "headerIitem1Iitem2"]
Array对象方法
forEach()- 应用频率:极高
- 参数:
array.forEach(function(currentValue,index,arr), thisValue) - 返回值:
undefined - 注意点:
forEach只能通过throw Error终止,不过一般没人这么做.换句话说forEach无法终止return/break都不好使.
let people=[
{name:'张三',age:20},
{name:'张三',age:19},
{name:'张三',age:18},
{name:'张三',age:17},
{name:'张三',age:16},
{name:'张三',age:15}
]
people.forEach((item,index)=>{//利用foreach修改people数组
people[index].age=item.age+1
});
console.log(people)//[{name: "张三", age: 21},{name: "张三", age: 20},{name: "张三", age: 19},{name: "张三", age: 18},{name: "张三", age: 17},{name: "张三", age: 16}]
map():重构数组- 使用频率:极高
- 参数:
array.map(function(currentValue,index,arr), thisValue) - 返回值:
array - 特点:不会修改原数组
let people=[
{name:'张三',age:20},
{name:'张三',age:19},
{name:'张三',age:18},
{name:'张三',age:17},
{name:'张三',age:16},
{name:'张三',age:15}
]
let arr=people.map((item,index)=>{
return{
name:item.name+index,
age:item.age+index
}
})
console.log(arr)//[{name: "张三0", age: 20},{name: "张三1", age: 20},{name: "张三2", age: 20},{name: "张三3", age: 20},{name: "张三4", age: 20},{name: "张三5", age: 20}]
unshift():向数组的开头添加一个或更多元素,并返回新的长度- 使用频率:极高
- 参数:需要添加的
item - 返回值:
array.length - 特点:会修改原数组
let people=[
{name:'张三',age:20},
{name:'张三',age:19},
{name:'张三',age:18},
{name:'张三',age:17},
{name:'张三',age:16},
{name:'张三',age:15}
]
let obj=people.unshift({
name: "王五", age: 30
})
console.log(obj)//7
shift():删除数组中第一个元素- 返回值:数组中被删除的元素
- 使用频率:极高
- 特点:会修改原数组
let people=[
{name:'张三',age:20},
{name:'张三',age:19},
{name:'张三',age:18},
{name:'张三',age:17},
{name:'张三',age:16},
{name:'张三',age:15}
]
let obj=people.shift()
console.log(obj)//{name: "张三", age: 20}
push():向数组的末尾添加一个或更多元素,并返回新的长度- 使用频率:极高
- 参数:需要添加的
item - 返回值:
array.length - 特点:会修改原数组
let people=[
{name:'张三',age:20},
{name:'张三',age:19},
{name:'张三',age:18},
{name:'张三',age:17},
{name:'张三',age:16},
{name:'张三',age:15}
]
let obj=people.push({
name:'李四',age:26
})
console.log(obj)//7
pop():删除数组的最后一个元素并返回删除的元素- 使用频率:极高
- 返回值:数组中被删除的元素
- 特点:会修改原数组
let people=[
{name:'张三',age:20},
{name:'张三',age:19},
{name:'张三',age:18},
{name:'张三',age:17},
{name:'张三',age:16},
{name:'张三',age:15}
]
let obj=people.pop()
console.log(obj)//{name: "张三", age: 15}
includes():判断一个数组是否包含一个指定的值- 应用频率:极高
- 参数:
includes(item:必填,findStartIndex:默认0) - 返回值:`Boolean
let arr=['张三','李四','王五']
let bool=arr.includes('张三');
console.log(bool)//true
indexOf():搜索数组中的元素,并返回它所在的位置- 应用频率:高
- 参数:
array.indexOf(item:必填,start:默认0) - 返回值:
index
let arr=['张三','李四','王五']
let index=arr.indexOf('王五');
console.log(index)//2
lastIndexOf():从后往前找- 应用频率:高
- 参数:
array.lastIndexOf(item:必填,start:默认array.length-1) - 返回值:
index
let fruits = ["Apple","Banana", "Orange", "Apple", "Mango"];
let index=fruits.lastIndexOf("Apple");
console.log(index)//3
Array.isArray():判断是不是数组- 应用频率:高
- 参数:
Array.isArray(array) - 返回值:
Boolean
let fruits = ["Banana", "Orange", "Apple", "Mango"];
let bool = Array.isArray(fruits);
console.log(bool)//true
splice():从数组中添加或删除元素- 使用频率:高
- 参数:
array.splice(index:删除开始位置,howmany:删除个数,item1,.....,itemX) - 返回值:截取的数组片段
- 特点:会修改数组
let fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
let citrus = fruits.splice(1,1,"total");
console.log(citrus)//["Orange"]
console.log(fruits)//["Banana", "total", "Lemon", "Apple", "Mango"]
slice():选取数组的的一部分,并返回一个新数组- 返回值:截取的数组片段
- 参数:
array.slice(start:默认值0, end:array.length-1) - 使用频率:高
- 技巧:可以复制数组
- 特点:不会修改数组
let fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
let citrus = fruits.slice(1,3);
console.log(citrus)//["Orange", "Lemon"]
join():将数组转成字符串- 应用频率:高
- 参数:
array.join(separator:默认','分割) - 返回值:
string
let fruits = ["Banana", "Orange", "Apple", "Mango"];
let str=fruits.join('');
console.log(str)//BananaOrangeAppleMango
filter():检测数值元素,并返回符合条件所有元素的数组- 应用频率:高
- 参数:
array.filter(function(currentValue,index,arr), thisValue) - 返回值:
array - 特点:不会修改原数组
let people=[
{name:'张三',age:20},
{name:'张三',age:19},
{name:'张三',age:18},
{name:'张三',age:17},
{name:'张三',age:16},
{name:'张三',age:15}
]
let arr=people.filter(item=>{
return item.age>=18
})
console.log(arr)//[{name: "张三", age: 20},{name: "张三", age: 19},{name: "张三", age: 18}]
sort():数组排序- 返回值:
array - 应用频率:高
- 参数:
array.sort(sortfunction) - 特点:不会修改原数组
- 返回值:
let people=[
{name:'张三',age:20},
{name:'张三',age:19},
{name:'张三',age:18},
{name:'张三',age:17},
{name:'张三',age:16},
{name:'张三',age:15}
]
let arr=people.sort(function(a,b){
return a.age-b.age
})
console.log(arr)//[ {name: "张三", age: 15},{name: "张三", age: 16},{name: "张三", age: 17},{name: "张三", age: 18},{name: "张三", age: 19},{name: "张三", age: 20}]
reduce():将数组元素计算为一个值(从左到右)- 使用频率:高
- 参数:
array.reduce(function(total, currentValue, currentIndex, arr), initialValue:传递给函数的初始值)
let people=[
{name:'张三',age:20},
{name:'张三',age:19},
{name:'张三',age:18},
{name:'张三',age:17},
{name:'张三',age:16},
{name:'张三',age:15}
]
let count = people.reduce(function (total, item) {
return total + item.age
},0)
console.log(count) //105
concat():连接两个或者更多的数组,并返回结果- 语法:
array1.concat(array2,array3,...,arrayX) - 参数:
array2, array3, ..., arrayX,必填属性,可以是具体的值,也可以是数组 - 应用频率:中
- 语法:
一:连接数组
let hege = ["Cecilie", "Lone"];
let stale = ["Emil", "Tobias", "Linus"];
let kai = ["Robin"];
let newArr=hege.concat(stale,kai);
console.log(newArr)//["Cecilie", "Lone", "Emil", "Tobias", "Linus", "Robin"]
二:连接值
let hege = ["Cecilie", "Lone"];
let newArr=hege.concat('stale','kai');
console.log(newArr)//["Cecilie", "Lone", "stale", "kai"]
some():检测数组元素中是否有元素符合指定条件- 返回值:
Boolean - 参数:
array.some(function(currentValue,index,arr),thisValue) - 应用频率:中
- 返回值:
let books=[
{id:1,name:'西游记',price:'$186'},
{id:2,name:'红楼梦',price:'$286'},
{id:3,name:'水浒传',price:'$386'},
{id:4,name:'三国演义',price:'$86'},
{id:5,name:'中华字典',price:'$586'},
{id:6,name:'钢铁是怎么练成的',price:'$686'}
];
let newBook={id:1,name:'成语字典',price:'$999'}
let obj=books.some(item=>{
if(item.id==newBook.id){
item.name=newBook.name;
item.price=newBook.price;
return true
}
});
if(!obj){
books.push(newBook)
}
console.log(books)//[{id: 1, name: "成语字典", price: "$999"},{id: 2, name: "红楼梦", price: "$286"},{id: 3, name: "水浒传", price: "$386"},{id: 4, name: "三国演义", price: "$86"},{id: 5, name: "中华字典", price: "$586"},{id: 6, name: "钢铁是怎么练成的", price: "$686"}]
find():返回符合传入测试(函数)条件的数组元素- 应用频率:中
- 参数:
array.find(function(currentValue, index, arr),thisValue) - 返回值
array.item
let people=[
{name:'张三',age:20},
{name:'张三',age:19},
{name:'张三',age:18},
{name:'张三',age:17},
{name:'张三',age:16},
{name:'张三',age:15}
]
let obj=people.find(item=>{
return item.age>19
})
console.log(obj)//{name: "张三", age: 20}
findIndex():返回符合传入测试(函数)条件的数组元素- 应用频率:中
- 参数:
array.findIndex(function(currentValue, index, arr),thisValue) - 返回值
array.index
let people=[
{name:'张三',age:20},
{name:'张三',age:19},
{name:'张三',age:18},
{name:'张三',age:17},
{name:'张三',age:16},
{name:'张三',age:15}
]
let obj=people.findIndex(item=>{
return item.age<16
})
console.log(obj)//5
reverse():翻转数组- 使用频率:低
- 返回值:Array
let people=[
{name:'张三',age:20},
{name:'张三',age:19},
{name:'张三',age:18},
{name:'张三',age:17},
{name:'张三',age:16},
{name:'张三',age:15}
]
people.reverse();
console.log(people)//[{name: "张三", age: 15},{name: "张三", age: 16},{name: "张三", age: 17},{name: "张三", age: 18},{name: "张三", age: 19},{name: "张三", age: 20}]
from():通过给定的对象中创建一个数组- 应用频率:低
- 返回值:
array - 重点应用:数组去重
let arr=[1,2,3,1,4,45,5,8,9,8,7,5,5,55]
let set=new Set(arr)
console.log(Array.from(set))//[1, 2, 3, 4, 45, 5, 8, 9, 7, 55]
every():检测数值元素的每个元素是否都符合条件- 返回值:Boolean
- 应用频率:极低
- 参数:
array.every(function(currentValue, index, arr),thisValue)
let people=[
{name:'张三',age:20},
{name:'张三',age:19},
{name:'张三',age:18},
{name:'张三',age:17},
{name:'张三',age:16},
{name:'张三',age:15}
]
let bool=people.every(item=>{
return item.age>=18
})
if(!bool){
console.log('有未成年人')
}
fill():使用一个固定值来填充数组- 应用频率:极低
- 语法:
array.fill(value, start, end) - 参数:
value必填 start默认0 end默认array.length
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.fill("Runoob",1,2);
console.log(fruits)//["Banana", "Runoob", "Apple", "Mango"]
entries():返回数组的可迭代对象- 应用频率:极低
let fruits = ["Banana", "Orange", "Apple", "Mango"];
let obj=[...fruits.entries()];
console.log(obj[0])//[0, "Banana"]
console.log(obj[1])//[1, "Orange"]
console.log(obj[2])//[2, "Apple"]
console.log(obj[3])//[3, "Mango"]
keys():返回数组的可迭代对象- 应用频率:极低
let fruits = ["Banana", "Orange", "Apple", "Mango"];
let str=fruits.keys();
console.log(Array.from(str))//[0, 1, 2, 3]
copyWithin():从数组的指定位置拷贝元素到数组的另一个指定位置中- 语法:
array.copyWithin(target, start, end) - 参数:
target必填 start默认0 end默认Array.length - 应用频率:极低
- 语法:
一个参数:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.copyWithin(1)==fruits.copyWithin(1,0,4)
console.log(fruits)//["Banana", "Banana", "Orange", "Apple"]
解释说明:

两个参数:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.copyWithin(1,2)==fruits.copyWithin(1,2,4)
console.log(fruits)//["Banana", "Apple", "Mango", "Mango"]
解释说明

三个参数:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.copyWithin(1,2,3);
console.log(fruits)//["Banana", "Apple", "Apple", "Mango"]
