引用类型之数组

创建数组

  1. var colors=new Array();//new可以省略
  2. var colors=[];
读取和设置数组的值
var color=['red','blue','green']
color[2]='black';//修改第二项的值
color[3]='brown'//新增第四项

数组的属性(length)

length属性可以读取也可以设置。
可以向数组的末尾移除项,也可以向数组中添加新项。
移除项:

var color=['red','blue','green']
color.length=2;//移除项

添加项:

var color=['red','blue','green']
color[color.length]='black';//最后一项添加新项
color[22]='brown'//中间的为undefind

检测数组

  1. instanceof
if(value instancef Array){
    //对数组进行一些操作
}
  1. Array.isArray()
if(Array.isArray(value)){
    //对数组进行一些操作
}

数组方法

转换方法

toString()方法会返回数组中的每个值的字符串形式拼接而成的一个以逗号分割的字符串。

var color=['red','blue','green']
alert(color.toString())//'red,blue,green'

valueOf()方法返回的还是数组。
join()方法返回包含所有数组项的字符串。接收一个参数,即用作分隔符的字符串。

var color=['red','blue','green']
alert(color.join(','));//'red,blue,green'
alert(color.join('||')//'red||blue||green'
栈方法

后进先出(就是删除的时候从后面开始删除)
push()方法接收任意数量的参数,把它们加到数组的末尾,并返回修改后数组的长度。
pop()方法则从数组末尾移除最后一项,并返回移除的项。

var color=[];
var count=color.push('red','green')
alert(count)//2
var item=color.pop()
alert(item)//green
队列的方法

先进先出,在末端添加项,在前端移除项,并返回移除的项。

var color=[];
var count=color.push('red','green')
var item=color.shift()
alert(item)//'red'

shift与pop的用途相反,在前端添加任意项并返回新数组的长度。

var color=new Array('black');
var item=color.unshift('red','green');
alert(item);//[red,green,balck]
重排序的方法

reverse()是逆向排序
sort()是从小到大排序。对于数值类型或者其valueOf()方法可以使用一个简单的比较函数,传递到sort()方法中。

var value=[2,3,1,5]
value.sort(function compare(){
    value1-value2;
})//只有是正数的时候才调换两个值得顺序。
操作方法

slice()方法基于当前数组中的项创建一个新的数组。slice()方法可以接受一个或两个参数,即要返回项的开始和结束位置。在只要一个参数时,返回从参数开始到数组结束的位置。当有两个参数的时候,返回开始和结束的位置的项,但不包括结束项。

var color=['red','green','yellow']
var color2=color.slice(1)
alert(color2)//['green','yellow']
var color3=color.slice(1,2)
alert(color3)//['green']

splice()方法
splice(0,2)//从第0个位置,取2个 splice(2,0,'red','green')//从第2个位置取0个,插入两项。
splice(2,1,'red','green')//从第2个位置取1个,并替换成'red,'green'。

位置方法(定位)

indexOf()接收两个参数要查找的项和(可选)表示要查找起点位置的索引,indexOf从数组开头进行查找,而lastIndexOf()从数组末尾开始查找。都返回要查找的项在数组中的位置。没有的话返回-1。

var color=[1,2,3,4,5,4,3,2,1]
alert(number.indexOf(4))//3,数字4在第3个位置
alert(number.indexOf(4,4))//5
迭代方法

every和some用于查询数组中的项是否满足某个条件。但是,every是每个都必须满足返回true,而some是有一个满足就返回true。

var number=[1,2,3,4,5,4,3,2,1]
var everyResult=number.every(functon(item,index,array){
    retrun (item>2)
});
alert(everyResult)//false

然而,filter函数返回的是数组,对查询某些符合条件的所有数组项很有用。

var number=[1,2,3,4,5,4,3,2,1]
var result=number.filter(function(item,index,array){
    return (item>2);
});
alert(result)//[3,4,5,4,3]

map()也返回一个数组,适合创建包含项与另一个数组一一对应的数组。

var number=[1,2,3,4,5,4,3,2,1]
var result=number.map(function(item,index,array){
    return item*2;
}
alert(result)//[2,4,6,8,10,8,6,4,2]

forEach()方法只是对每一项传入的函数,这个方法没有返回值,和for循环迭代数组一样。

var number=[1,2,3,4,5,4,3,2,1];
number.forEach(function(item,index,array){
//执行某些操作
});
归并方法

reduce()和reduceRight()方法只是决定了从哪头开始遍历数组,其他的都一样。接收4个值:前一个值,当前值,项的索引,数组对象

var number=[1,2,3,4,5,4,3,2,1];
var sum=number.reduce(function(prev,cur,index,array){
    return pre+cur;
});
alert(sum)//15

实例

写一个函数,操作数组,数组中的每一项变为原来的平方,在原数组上操作

function squareArr(arr){
for(var i=0;i<arr.length;i++){
     arr[i]=arr[i]*arr[i];
}
}
var arr = [2, 4, 6]
squareArr(arr)
console.log(arr)

写一个函数,操作数组,返回一个新数组,新数组中只包含正数,原数组不变

function filterPositive(arr){
    var newArr=arr.every(function(value){
    return value>0
})
}
var arr = [3, -1,  2,  '饥人谷', true]
var newArr = filterPositive(arr)
console.log(newArr) //[3, 2]
console.log(arr)

代码输出(过滤一个数组,在原数组上操作)

var arr=[3,1,0,-1,-3,2,-5]
function filter(arr){
  for(i=0;i<arr.length;i++){
    if(arr[i]<=0){
      arr.splice(i,1);
      i--;//因为删除了一个元素,索引值也要删除1。
}
}
}
filter(arr);
console.log(arr);

过滤数组,生成新的数组,只保留正数

var arr=[3,1,0,-1,-3,2,-5]
function filter(arr){
    var newArr=[];
    for(i=0;i<arr.length;i++){
      if(arr[i]>0){
          newArr.push(arr[i]);
}
}return newArr;
}
var arr2=filter(arr)
console.log(arr2)
console.log(arr)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   引用类型的值(对象)是引用类型的一个实例。   在 ECMAscript 中,引用类型是一种数据结构,用于将数...
    霜天晓阅读 4,780评论 0 1
  • 本章内容 使用对象 创建并操作数组 理解基本的 JavaScript 类型 使用基本类型和基本包装类型 引用类型的...
    闷油瓶小张阅读 3,931评论 0 0
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,461评论 0 4
  • 引用类型的值(对象)是引用类型的一个实例。在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在...
    AlexTamir阅读 3,405评论 0 0
  • 神护卫我免于 仅止于心的思量 唱恒久的歌者 在骨髓中思考 ——叶芝 第一眼看到这首诗被深深触动,是因为“仅于心的思...
    一支记忆的梗阅读 4,536评论 1 2