JavaScript Array/forEach/sort/jo
2018-05-06 本文已影响0人
青山白衣
对象是用于构造数组的全局对象,数组是类似于列表的高阶对象。
1.数组声明
var a = Array(3)会生成一个长度为3的空数组
image.png
//三种写法一样,都是生成相同数组
var a = Array(3,3)
var a = [3,3]
var a = new Array(3,3)
一个3与两个3的结果不同,也称为js的不一致性。
2.数组遍历
image.png3.伪数组
原型链中没有Array.prototype即为伪数组
在js中只有一个伪数组 arguments
image.png
4.数组的API
4.1 arr.forEach()接受一个函数,函数接受两个参数,第一个参数为数组的value,第二个为key,forEach()没有返回值『 不会改变原始数组 』如下图
image.png了解更多关于forEach https://www.jianshu.com/p/fb7f72d6b73f
4.2 arr.sort() 『 会改变原始数组 』
var a = [3,6,1,5,2,4]
a.sort() //[1, 2, 3, 4, 5, 6]
a.sort(function(x,y){
return x-y
}) //[1, 2, 3, 4, 5, 6]
a.sort(function(x,y){
return y-x
}) //[6, 5, 4, 3, 2, 1]
实现 students 按分数的高低从大到小排列*/
//方法1:
var students = ['小明','小红','小花']
var scores = { 小明: 59, 小红: 99, 小花: 80 }
students.sort(function(x,y){ return scores[y]-scores[x]})
//方法2:
var students = ['小明','小红','小花']
var scores = { 小明: 59, 小红: 99, 小花: 80 }
students.sort((x,y) =>scores[y]-scores[x])
4.3 arr.join()『 不会改变原始数组 』
var a = ['a','b','c']
a.join('--')//"a--b--c"
a.join(',') // "a,b,c" 此处用逗号连接,将数组a变为了字符串
a.join() // 与上一行等同
4.4 arr.concat()『 不会改变原始数组 』
var a = ['a','b','c']
a.concat('ss') // ["a", "b", "c", "ss"]
var b = ['q','w','e']
a.concat(b)
a // ["a", "b", "c", "q", "w", "e"]
b.concat(a)
b // ["q", "w", "e", "a", "b", "c"]
var c = a.concat(b)
c // ["a", "b", "c", "q", "w", "e"]
var a = ['a','b','c']
var b = a.concat([]) // 这个方法可以用来复制一个数组
b // ["a", "b", "c"]
// 这样可以得到一个新的数组,此时 a === b 返回 false
var a = ['a','b','c']
var b = a
b // ["a", "b", "c"]
// 这样数组a与b使用同一内存地址,此时 a === b 返回 true
4.5 arr.map() 『不会改变原始数组,与forEach一样,唯一不同的是map有返回值』
//map可以返回一个值
var a = ['1','2','3']
a.map(function(x,y){
return x*2
}) // [2, 4, 6]
//map也可以返回一个对象
var a = [1,2,3]
a.map(function(value,key){
return{
v:value,k:key
}
})
// {v: 1, k: 0}
// {v: 2, k: 1}:
// {v: 3, k: 2}
4.6 arr.filter() 『不会改变原始数组』
var a = [1,2,3,4,5,6,7,8,9,10]
a.filter(function(value,key){
return value>=5
}) // [5, 6, 7, 8, 9, 10]
/*var a = [1,2,3,4,5,6,7,8,9]
获取所有偶数并得到所有偶数的平方*/
//方法1:
var a = [1,2,3,4,5,6,7,8,9]
a.filter(function(value){
if(value%2===0){
return a;
}
}).map(function(value){
return value*value
})
4.7 arr.reduce()『不会改变原始数组』
/*var a = [1,2,3,4,5,6,7,8,9]
计算所有数的和*/
var a = [1,2,3,4,5,6,7,8,9]
a.reduce(function(num,now){
return num+now
}) // 45
map,filter 可以用reduce表示,如下
/*var a = [1,2,3,4,5,6,7,8,9]
计算所有奇数的和*/
//方法1:
var a = [1,2,3,4,5,6,7,8,9]
a.reduce(function(num,now){
if(now%2===1){
return num+now
}else{
return num
}
},0) // 25
//返回数组成员*2后的数组
var a = [1,2,3]
a.reduce(function(arr,n){
arr.push(n*2)
return arr
},[]) // [2, 4, 6]
//返回数组偶数成员
var a = [1,2,3,4]
a.reduce(function(arr,n){
if(n%2===0){
arr.push(n)
}
return arr
},[]) // [2,4]