JavaScript数组创建与操作

数组的创建

1、数组的创建方式有两种

1.1 Array构造函数创建

var arr = new Array()//创建一个空数组
var arr = new Array(10)//创建一个长度为10的数组,单传一个数字为数组的长度(不可以传小数)
var arr = new Array('red','blue','green')//创建一个包含3项的字符串的数组

使用Array创建的时候可以省略new操作符 

1.2 字面量创建

var arr = ['red','blue','green']//创建一个包含3个字符串的数组
var arr = []//创建一个空数组
var arr = [1,2,]//不推荐,会创建一个包含2或者3项的数组(在IE8及之前的版本创建3项数组)
var arr = [,,,,,]//不推荐,会创建一个包含5或者6项的数组(同上)

数组的常用方法

2.1 改变原数组的方法

//push()方法
var arr = [1,2];
arr.push(3)//[1,2,3]
//push()方法可以接收任意参数,逐个添加到数组末尾,返回修改后的数组
//手写Array.push()方法
Array.prototype.push = function() {
    for(var i = 0; i < arguments.length; i++) {
        this[this.length] = arguments[i]
    }
    return this.length
}

//pop()方法
var arr = [1,2,3];
arr.pop(3)//[1,2]
//pop()方法从数组末尾移除最后一项,减少数组的length值,然后返回移除的项

//unshift()方法
var arr = [1,2,3];
arr.unshift(4)//[4,1,2,3]
//在数组前边任意添加个项,并返回新数组长度

//shift()方法
var arr = [1,2,3];
arr.shift()//[2,3]
//shift()方法能够移除数组中的第一项并返回该项,数组长度减一

//reverse()方法
var arr = [1,2,3];
arr.reverse()//[3,2,1]
//reverse()方法反转数组项的数据

//sort()方法
var arr = [1,2,3,11,23];
arr.sort()//[1, 11, 2, 23, 3]
//sort方法按升序排列(小的在前面),为排序sort()方法会调用每个数组项的toString()方法,然
//后比较得到字符串(即使数组每项都是数值),确定如何排序,这种排序方法很多情况下不是最佳方案,
//因此sort()方法可以接收一个函数

//sort()自定义函数
//1、必须传两个形参,
//2、看返回值
//当返回值为-1时,前面的数放在前面
//当返回值为1时,那么后面的数放在前边
//为0的时候不动
//升序函数
function compare(val1, val2) {
    if(val1 > val2) {//降序改为<
        return 1;
    } else {
        return -1
    }
}
//升序函数简化
function compare(val1, val2) {
   val1 - val2
   //降序为 val2 - val1
}
var arr = [1,32,3,11,23];
arr.sort(compare)//[1,3,11,23,32]

//splice()方法
//splice()接收三个参数splice(从第几位开始,截取多少的长度,在切口处添加的新数据(长度不限))
var arr = [1,1,2,2,3,3]
arr.splice(1,2)//[1,2,3,3]

var arr = [1,1,2,2,3,3]
arr.splice(2,2,5,5)//[1,1,5,5,3,3]

var arr = [1,2,3,5]
arr.splice(3,0,4)//[1,2,3,4,5]

var arr = [1,2,3,5]
arr.splice(-1,0,4)//[1,2,3,4,5]
//splice()计算下标的方法

splice = function(pos) {
    pos += pos > 0 ? 0 : this.length
}





2.2不改变原数组

//concat()方法
var arr = [1,2,3]
var arr1 = [4,5,6]
arr.concat(arr1)//[1,2,3,4,5,6]

//concat()方法可以基于当前数组中的所有项创建一个新数组,具体来说就是这个方法会创建当前数组的一个副
//本,然后将接收到的参数添加到这个副本的末尾,最后返回全新的数组

//slice()方法
var arr = [1,2,3,4,5,6]
arr.slice(1)//[2,3,4,5,6]
arr.slice(1,4)//[2,3,4]
arr.slice(5,4)//[]
//slice()方法基于当前数组的一个或者多个项创建一个新数组
//可以接收两个参数,即项的起始位置和结束位置(如果只传一个参数,即为起始位置,结束位置在数组末尾项)
//如果有两个参数该方法返回起始位置和结束位置中间的项,不包括结束位置的项
//如果slice()方法的参数中有一个负数,则用数组的长度来加上该数来确定相应的位置
//如果结束位置小于起始位置,则返回空数组

//join()方法
var arr = [1,2,3] 
arr.join(',')//1,2,3
arr.join('||')//1||2||3
//join()方法只接收一个参数(String)作为字符串的分隔符,如果不传值或者传undefined则使用逗号来分割
//IE7及更早的版本使用"undefined"作为分隔符

sort方法扩展

//根据字符串长度排序

var arr = ['gfdgrewgre','gfdsgs','juytkuytkuyr','fdsggtrhtr','gfdsfdsgrbrsbt'];
arr.sort(function(val1,val2) {
   return val1.length - val2.length
})

//根据ASCLL码排序

function retBytes(str) {
    var num = str.length ;
    for (var i = 0; i < str.length; i++) {
        if(str.charCodeAt > 255) {//charCodeAt()方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。
            num ++
        }
    }
    return num
}

var arr = ['gfdgr哈哈ewgre','我是中文','uytkuyr','fdsggtrhtr','gf呵呵sbt'];
arr.sort(function(val1,val2) {
   return retBytes(val1) - retBytes(val2)
})

//给一个有序数组乱序
var arr = [1,2,3,4,5,6.7]
arr.sort(function() {
    return Math.random() - 0.5
})

数组去重方法

//原型链数组去重
Array.prototype.unique = function() {
	var temp = {},
		arr = [],
		len = this.length
	for (var i = 0; i < len; i++) {
		if (!temp[this[i]]) {
			temp[this[i]] = 'aaa'
			arr.push(this[i])
		}
	}
	return arr
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值