js 数组

数组是值的有序集合。
每个值叫做一个元素,而每个元素在数组中有一个位置,以数字表示,称为索引。(范围在0~2^32-2之间的整数属性名是数组的索引)
数组操作

//创建删除数组
var empty=[] //[]
var misc=[1.1,,"a"]//[1.1,undefined,"a"]
var a=new Array(10);//[] 数组为空 length为10
//数组的读写
misc[2] //"a"
misc[1]=1 //[1.1,1,"a"]
misc.push("last") //[1.1,1,"a","last"]
misc.unshift("first") //["first",1.1,1,"a","last"]
misc.pop() //["first",1.1,1,"a"]
misc.shift() //[1.1,1,"a"]

数组也可以使用getter和setter方法。
数组遍历

var keys=Object.keys(o)
var values=[]
for(var i=0;i<keys.length;i++)
{
    var key=keys[i];
    values[i]=o[key]//在value数组中保存属性值
}
// 优化版,for循环很容易出现性能问题。上条for循环每次都要查询keys的长度,现在:
for(var i=0,len=keys.length;i<len;i++)
{
    //循环体不变
}

使用continue可以跳过当前一次循环。break停止之后所有循环。
for/in能枚举继承的属性名,可以用额外的检测方法来过滤

for(var i in a)
{
    if(!a.hasOwnProperty(i)) continue;
}

多维数组

var table=new Array(10)
for(var i=0;i<table.length;i++)
{table[i]=new Array(10)}
for(var row=0;row<table.length;row++){
    for(col=0;col<table[row].length;col++)
    {
        table[row][col]=row*col;
    }
}
var product=table[5][7] //35

数组操作方法
数组的操作方法比较多也比较常用。

//将数组中的所有元素都转化为字符串并连接在一起
var a=[1,2,3]
a.join() // "1,2,3"
a.join() // "1 2 3"
var b=new Array(10) //长度为10的空数组
b.join("-") //'---------' 9个连字号组成的字符串

//将原数组中的元素颠倒顺序,返回逆序的数组
a.reverse() //[3,2,1]

//将数组中的元素排序并返回排序后的数组,当不带参数调用["bb","cc","aa"].sort() //["aa","bb","cc"]
var b=[33,4,1111,222]
b.sort() //[1111,222,33,44]
b.sort((a,b)=>{
    return a-b //[4, 33, 222, 1111] 依据顺序返回 负数,0,正数 
})
b.sort((a,b)=>{
    return b-a //顺序和上面相反
})
var c=[{a:2},{a:3},{a:1}]
c.sort((a,b)=>{
    return a.a-b.a //[{a:1},{a:2},{a:3}] 根据相减返回的负数,0,正数决定顺序
})

//创建并返回一个新数组
var a=[1,2,3]
a.concat(3,4) //[1,2,3,3,4]

//返回指定数组的一个片段或子数组,它的两个参数分别指定了片段的开始和结束位置。
var a=[1,2,3,4,5]
a.slice(0,3) //[1,2,3]
a.slice(3) //[4,5]
a.slice(1,-1) //[2,3,4]
a.slice(-3,-2) //[2]

//在数组中插入或删除元素的通用方法
//第一个参数 必需。规定从何处添加/删除元素。该参数是开始插入和(或)删除的数组元素的下标,必须是数字。
//第二个参数。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
//第三个参数 item1, ..., itemX   可选。要添加到数组的新元素
var a=[1,2,3,4,5,6,7,8]
a.splice(4) //return [5,6,7,8]; a是[1,2,3,4]
a.splice(1,2) //return [2,3]; a是[1,4]
a.splice(1,1) //return [4]; a是[1]
var a=[1,2,3,4,5]
a.splice(2,0,"a","b") //返回[]; a=[1,2,"a","b",3,4,5]
a.splice(2,2,[1,2],3) //返回["a","b"]; a=[1,2,[1,2],3,3,4,5]

//数组转字符串 调用和join()方法返回的字符串是一样的
[1,2,3].toString() //生成"1,2,3"
["a","b","c"].toString() //生成"a,b,c"
[1,[2,"c"]].toString() //"1,2,c"

//以下是es5的方法
var data=[1,2,3,4,5]
var sum=0
data.forEach(value=>{sum+=value})
sum //15
// map的使用方法同上 
//forEach在循环中不能使用break语句,传递给map的函数应该有返回值。

//过滤,感觉稍微封装了下map函数
a=[5,4,3,2,1]
svalues=a.filter(x=>x<3)  //[2,1]
eother=a.filter((x,i)=>i%2==0) //[5,3,1]

//逻辑判定
a=[1,2,3,4,5]
a.every(x=>x<10) //true 所有的值<10
a.every(x=>x%2===0)  //false 不是所有的值都是偶数

a.some(x=>x%2===0) //true a含有偶数值
a.some(isNaN) //false a不包含非数值元素

//将数组组合成单个值
var a=[1,2,3,4,5]
//reduce 第二个参数是初始值
a.reduce((x,y)=>x+y) //15
a.reduce((x,y)=>x*y,1) //120
//reduceRight同上,它是按照数组索引从高到低处理数据。

//搜索整个数组中具有给定值的元素,返回找到的第一个元素的索引,如果没有找到就返回-1.
a=[0,1,2,1,0]
a.indexOf(1) //1 a[1]是1 
a.lastIndexOf(1) //1 a[3]是1 按索引从高到低搜索
a.indexOf(3) //-1 找不到
a.indexOf(1,2) //3 从索引2开始找,包括索引2

数组类型

//区分是否数组 typeof不能很好的区分,instanceof在复杂的web环境中不适用。
Array.isArray([]) //true
Array.isArray({}) //false
//或者,我自己造了个轮子
JSON.stringify([1,2,3,4,5].slice(00))==="[]"//比较麻烦
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值