JavaScript Array 学习笔记
加不加 new
对 Array
都一样
// 以下两者的效果是一样的
var a = Array(3)
var a = new Array(3)
情况一:
var a = Array(3)
// 生成一个对象,length属性为3
a.length
// 3
a
// (3) [empty × 3]
a.push
// f push() {[native code]}
"0" in a
// false
a.__proto__===Array.prototype
//true
情况二:
var b = Array(3,3)
// 生成一个对象,此时的情况和第一种不同,length属性为2
b.length
// 2
a
// (2)[3,3]
- 基本数据类型对应的构造函数(例如
number
、string
、Boolean
)
不加 new
返回基本数据类型
加 new
返回对象
- 复杂数据类型(例如
object
、array
、function
)
加 new
和不加 new
都一样
var f = function(a,b){
return a+b
}
// 等价于
var f = new function('a','b','return a+b')
function
是关键字
Function
是全局对象
函数声明方法有:具名函数、匿名函数、构造函数。
伪数组是指原型链中没有 Array.Prototype
的对象。
Array 对象内置方法
forEach
无返回值
sort
改变自身的值
-
join
-
concat
-
map
映射
和 forEach
几乎一样
相比 forEach
有返回值,返回一个新数组
filter
过滤
跟 map
很像
reduce
map 可以用 reduce 表示
a=[1,2,3]
a.reduce(function(arr,n){
arr.push(n*2)
return arr
},[])
// 返回 [2,4,6]
filter 可以用 reduce 表示
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]
题目
- 第一题
var students = ['小明','小红','小花']
var scores = { 小明: 59, 小红: 99, 小花: 80 }
students.sort(???)
请填写 ??? 使得 students 按分数的高低从大到小排列
// 答案一:
function(x,y){return scores[y]-scores[x]}
// 答案二:
function(a,b){
return scores[b] - scores[a]
}
- 第二题
var a = [1,2,3,4,5,6,7,8,9]
a.filter(???).map(???) // [4,16,36,64]
1. 获取所有偶数
2. 得到所有偶数的平方
// 答案一:
var a = [1,2,3,4,5,6,7,8,9]
a.filter(function(n){if(n%2===0){return n}}).map(function(x){return x*x}) // [4,16,36,64]
// 答案二:
var a = [1,2,3,4,5,6,7,8,9]
a.filter( (n)=>n%2===0 ).map( (n)=> n*n ) // [4,16,36,64]
- 第三题
var a = [1,2,3,4,5,6,7,8,9]
a.reduce(???,???)
1. 计算所有奇数的和
// 答案一:
var a = [1,2,3,4,5,6,7,8,9]
a.reduce(function(arr,n){
if(n%2===1){
return arr+n
}else{
return arr
}}, 0)
// 答案二:
var a = [1,2,3,4,5,6,7,8,9]
a.reduce( (sum,n)=> {
return n%2===1 ? sum + n : sum
} ,0)