数组是什么
数据就是原型链中有 Array.prototype 的对象
如果给数组添加其他属性
let a=[1,2,3]
a.name='name'
for( let i=0 i<a.lenght i++){
console.log(a[i])
}
//1,2,3
- 不会遍历出key不是数字的属性,因为我们人为的设定
i=0,i++,只会遍历到下标记key为数字的属性
for(let key in a){
console.log(key)
}
// 1,2,3,name
for...in把a中的全部属性打印出来
数组常用API
forEach
- forEach() 方法对数组的每个元素执行一次提供的函数,没有返回值
array.forEach(callback(value, key, arr){
//do something
}, this)
//arr,this可选
-----------------------------------------------------------------
array.forEach( function(value,key){
//do some thing
})
- forEach用this传参给里面的函数调用 ,所以
array.forEach(function(value,key){//do something})能够遍历array - a.forEacj中的函数接受3个参数
arr.value,arr.key,arr自己,第三个可以省略,下面2行代码相等
array.forEach(function(value,key){})
array.forEach.call(this,function(value,key ){})
- 我们可以自己手写一个forEach
let foo={0:'a',1:'b',length:2}
foo.forEach=function(fn){
for(let i = 0;i < foo.length; i++){
fn(this[i],i) //foo的每一项都调用一下fn
}
}

map
map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。
- 基本等于foreachm,有返回值
- 速度比foreach快,不会对原数组产生影响
fillter
过滤器:filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素
array.filter(function(currentValue,index,arr){
}, thisValue)
//thisValue可选。对象作为该执行回调时使用,传递给函数,用作 this 的值。如果省略了 thisValue ,this 的值为"undefined
let array=[1,2,3,4,5,6,7,8,9,10]
array.fillter(function(value,key){
return value >= 5
})
//[5,6,7,8,9,10]
sort
用于排序数组,排序后,原数组将被改变
- 数组里面是数字的话,sort里的比较函数可以简单的写成
- 如果是字符串等,就不确定了,自己试一下a-b或者b-a
arr.sort(function (a, b) {
return a - b;
})
//a-b升序,b-a降序
concat
concat方法用于多个数组的合并。它将新数组的成员,添加到原数组成员的后部,然后返回一个新数组,原数组不变。
let array = [1,2]
array.concat(3,4)
//[1,2,3,4]
- 如果数组成员包括对象,concat方法返回当前数组的一个浅拷贝。所谓“浅拷贝”,指的是新数组拷贝的是对象的引用
let obj = { a: 1 };
let array = [obj];
let newArray = array.concat();
obj.a = 2;
newArray[0].a
// 2
- 用来复制一个数组
let array = [1,2,3]
let newarray=array.concat([])
console.log(newarray)
//[1,2,3]
reduce
reduce() 方法对累加器和数组中的每个元素(从左到右)应用一个函数,最后返回单个值。
arr.reduce(function(a, b, c, d){},e)
a:累加器的返回值,上一次的结果
b:当前处理的元素,现在
c:当前处理的元素的索引,第一次处理时,如果提供了初始值,则为0,没有提供则为1,可选
d:d:arr自己本身,可选
e:初始值,如果没有指定,则arr中的第一个值为初始值,可选
let arr=[1,2,3,4]
arr.reduce((prev, curr) => prev + curr )
//10
reduce可以表示map
a = [1,2,3]
a.reduce(function(arr,n){
arr.push(n*2)
return arr
},[])
//[2,4,6]
//每一项平方
reduce可以表示filter
a = [1,2,3,4,5,6,7,8,9,10]
a.reduce(function(arr,n){
if(n % 2 === 0){
arr.push(n)
}
return arr
},[])
//[2,4,6,8,10]
join
join() 方法将一个数组(或一个类数组对象)的所有元素连接成一个字符串并返回这个字符串
- 默认为
arr.join(',')
var a = [1, 2, 3, 4];
a.join(' ') // '1 2 3 4'
a.join(' | ') // "1 | 2 | 3 | 4"
a.join() // "1,2,3,4"