JS的数组
浏览器提供的接口叫API
JavaScript window.Array对象是用于构造数组的全局对象(也是函数)
1
2var a=Array(3) //生成一个length为3的每个都是undefined的数组 [undefined,undefined,undefined]<=>{length:3}
var a=Array(3,3) //生成一个length为2 的每个都是3的数组 [3,3]上面两行体现了JS的不一致性就是垃圾
- Number String Boolean 不加new 返回一个基本类型的值,加new返回复杂类型(对象)
Object Array Function 加new不加new都一样,是返回复杂类型(对象) - var 声明一个变量 ES6: let 声明一个变量,不会变量提升
- function 声明一个函数 关键字 等同于 if else var function
- Function 全局对象 var f=new Function(‘a’,’b’,’return a+b’)
函数声明方法总结
1 | 具名函数 function f(x,y){ 匿名函数function (x,y){ |
JS中数组的本质
- 人类理解:数组就是数据的有序集合
JS理解:数组就是原型链中有Array.prototype的对象 - 数组和对象的本质区别就是
__proto__
指向的是不是Array.prototype(push pop shift) - 伪数组的定义:如果与Array.prototype没有关系(原型链中没有Array.prototype这一环)或者没有.push .pop .shift方法
arguments是伪数组
数组最常用的API
Array 的用法全览:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array
a=[‘a’,’b’,’c’,’d’,’e’]
Array.prototype.forEach需要接受一个函数
1
2
3
4
5
6
7a.forEach(function(){}) ==> a.forEach.call(a,function(){})
a.forEach(function(x,y,z){console.log(x,y,z)}) //x的参数是value,y的参数是key,z就是a自己
function forEach(array,x){
for(let i=0;i<array.length;i++){
x(array[i],i)
}
}Array.prototype.sort默认从小到大
a.sort接受一个函数,返回的值如果是0,那么位置一样,如果结果是正数,前面的大,放后面,如果结果是负数,前面的小,放前面 sort就是快速排序1
2a.sort(function(x,y){return x-y}) //从小到大,把数组自己改变
a.sort(function(x,y){return y-x) //从大到小Array.prototype.join
1
var a=[1,2,3] a.join('york') "1york2york3york" //join把数组变成字符串
Array.prototype.concat
连接多个数组,1
2
3
4
5
6
7
8
9var a=[1,2,3],b=[4,5,6];
var c=a.concat(b);
console.;log(c); //[1,2,3,4,5,6]
//a.concat()复制一个数组 利用concat会返回一个新数组
var a=[1,2,3]
b=a.concat([])
console.log(b) //[1,2,3]
a===b falseArray.prototype.map
a.map和a.forEach的区别,a.forEach返回undefined,a.map返回把函数返回的每一个值都收集起来组成新的数组
a.map(function(value,key){return value×2})Array.prototype.filter
return的是boolean,如果值是true就要,是false就不要1
2
3var 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]Array.prototype.reduce
遍历这个数组,每次取一个结果放在下一个身上1
var a=[1,2,3,4,5,6,7,8,9,10];a.reduce(function(sum,n){return sum+n},0) 求和55
总结
map可以用reduce表示
1
var a=[1,2,3] a.reduce(function(arr,n){arr.push(n*2);return arr},[])[2,4,6]
filter可以用reduce表示
1
var a=[1,2,3] a.reduce(function(arr,n){if(n%2===0){arr.push(n);return arr},[])[2]
数组题
var students = [‘小明’,’小红’,’小花’] var scores = { 小明: 59, 小红: 99, 小花: 80 } students.sort(???)
请填写 ??? 使得 students 按分数的高低从大到小排列1
students.sort(function(x,y){return scores[y]-scores[x]})
var a = [1,2,3,4,5,6,7,8,9] a.filter(???).map(???) // [4,16,36,64]
- 获取所有偶数
- 得到所有偶数的平方
1
2a.filter(function(value,key){if(value%2===0)return value})
a.filter(function(value,key){if(value%2===0)return value}).map(function(value,key){return value*value})
var a = [1,2,3,4,5,6,7,8,9] a.reduce(???,???)
计算所有奇数的和1
a.filter(function(value,key){if(value%2===1)return value}).reduce(function(sum,n){return sum+n},0)
Comments