//数组:
// 1.new Array(length/content);
var arr1 = new Array(1.2, 4, 6, 8, 9);
var arr3 = new Array(10);//长度为10;如果只有一位数值,就会识别为长度,不能是小数。
// 2.字面量
var arr2 = [1,1];//稀松数组
//pic
//数组的一切方法来源于Array.prototype 写的时候可以简便写[].slice()等方法。
// 数组的读和写:
// arr[num]//不可以溢出读(数值是一种特殊的对象);结果是undefined
// pic
// arr[num] = xxx;//可以溢出写
// 数组常用的方法:
// ***
改变原数组:push, pop, shift, unshift, sort, reverse, splice
// ***
不改变原数组:concat, join —> split, toString, slice
//push:在数组的最后面加元素。
//pic
//写一个push函数:学会自己在原型链上写自己需要的方法。
var arr = [1, 2, 3];
Array.prototype.push = function () {
for(var i = 0; i < arguments.length; i ++) {
this[this.length] = arguments[i];//谁调用这个函数,this就指向谁(arr[arr.length])
}
return 'haha';//return this.length;
}
//pop:把数组最后一位剪切出来;不用传参
//unshift:在数组的前面加东西
//pic
//shift:在数组的前面减东西
//reverse:返回值是逆转后的数组
//pic
//splice:切片。splice(从第几位开始, 截取多少的长度, 在切口处添加新的数据(这个地方放多少个数据都可以))
//pic
//那么问题来了: 要在3和4之间添加一个5,怎么办?
//pic;这方法多用于插入
/
/数组方法一般参数也可以传负数,实现如下:
splice = function (pos) {
pos += pos > 0 ? 0 : this.length;
}
//如果splice只传1个参数(例如5:),那么就会剪切数组的前5个数(位数从0开始数)。
//pic
//sort:给数组排序(升序;按Asics码排的)
//pic
//上面的asica码排序不能满足我们的需求,**
sort函数给我们留了一个接口,可以往sort函数里面传一个匿名函数function () {},把这个函数填充完后,就可以使sort按任何一种我们想要方式排序;这个匿名函数不用我们自己去调用,在适当的时候,系统会调用它,我们只要把函数里面的规则填充完就可以了: //规则: //1.必须写两个形参 //2.看返回值:1) 当返回值为负数时,那么前面的数放在前面 // 2) 为正数,那么后面的数在前 // 3) 为0,不动。
**
//这个函数会被执行无数次,它会先比较1,3,–> 1,5 --> 1,4 -->…3,5 -->…3,-1 --> 10,0 -->…,认位置的,不认数;比如:5,4比较后,5和4交换位置后,是用4 继续和 10比较
var arr = [1, 3, 5, 4, 10, 0, -1];
arr.sort(function (a, b) {
// if(a > b) {
// return 1;
// }else {
// return -1;
// }
return a - b;//升序;return b - a;降序(冒泡排序)
})
//pic
//题目:给一个有序的数组,乱序;(Math,random();产生一个(0,1)的数)
var arr = [1, 2, 3, 4, 5, 6];
arr.sort(function (a, b) {
return 0.5 - Math.random();
});
console.log(arr);//打开浏览器,然后疯狂刷新
//排年龄:
var cheng = {
name : 'cheng',
age : 18,
sex : 'male',
face : 'handsome'
}
var deng = {
name : 'deng',
age : 45,
sex : 'male',
face : 'amazing'
}
var zhang = {
name : 'zhang',
age : 20,
sex : 'male',
face : 'fine'
}
var arr = [cheng, deng, zhang];
arr.sort(function (a, b) {
return a.age - b.age;
});
//按字符串长度排序:
var arr = ['jks', 'hsajhduas', 'a', 'nash', 'kkkkjuijkajishjxas', 'ashidhsaidjj', 'ksjoaokasnjndjasjjbsjahj'];
arr.sort(function (a, b) {
return a.length - b.length;
})
//按字节长度排:
function retBytes(str) {
var num = str.length;
for (var i = 0; i <str.length; i ++) {
if(str.charCodeAt(i) > 255) {
num ++;
}
}
return num;
}
var arr = ['jks维', 'hsajhd潮as', 'a欧维', 'nash', 'kkkkjuijka看v很傻很愤慨i你jishjxas', 'ashid冲hsa冲idjj', 'ksjoaokasnjndjasjjbsjahj'];
arr.sort(function (a, b) {
return retBytes(a) - retBytes(b);
})
//pic
//concat:连接两个数组;会把后面的数组拼接到前面数组上,并且不会改变原数组,返回的是一个新数组。
//pic
//toString:把数组变成字符串(数组重写)
//pic
//slice:slice(从该位开始截取, 截取到该位(默认是最后一位))
//pic:两个参数的情况
//pic:一个参数的情况:从第几位开始截取,截取到最后;没有参数:截取全部(把一个类数组转换成数组就会用到)
/**/join:join()里面传参数必须是字符串的,空串也可以;*
不传参数就会默认按逗号连接
。会把数组的每一位给你连接起来,连接成串,返回字符串。*
//pic
//和join可逆的一个方法split:split是String字符串的方法;该方法是字符串按照什么拆分成数组,返回数组
//pic
//join应用:把下面字符串拼接到一起,假如有100个字符串
var str = 'alibaba';
var str1 = 'baidu';
var str2 = 'tencent';
var str3 = 'toutiao';
var str4 = 'wangyi';
var str5 = 'xiaownag';
var str6 = 'nv';
//方法:字符串等原始值放在栈内存里面存储,是后进先出的,效率低;但是如果放在数组里面(堆内存),数组是散列结构,
var arr = [str, str1, str2, str3, str4, str5, str6];
console.log(arr.join(''));
console.log(arr.join());
//pic