15-数组基础、数组方法、数组排序

(一)、数组基础

1、声明数组方法:
(1)、数组字面量
var arr1 = [];
(2)、构造函数

通过系统内置的Array构造函数声明数组 不推荐

var arr2 = new Array();
(3)、这是声明数组的第三种方法,知道就行,不使用
var arr3 = Array();

所有数组都继承于Array.prototype,Array.prototype下所有的方法数组都可以继承来使用

	console.log(arr1.__prpto__);
	console.log(arr2.__prpto__);
	console.log(arr3.__prpto__);

	console.log(Array.prototype);
2、对象的三种声明方式:
	//对象
	var obj1 = {}; //对象字面量
	var obj2 = new Object();//通过系统内置的Object构造函数声明对象
	var obj3 = Object();
	console.log(Object.prototype);
	//所有的对象都继承于Object.prototype,
	//Object.prototype下所有的方法乃至属性,对象都是可以使用的

数组到底是什么?

在JavaScript中,数组的底层机制就是继承对象而来的。

在JavaScript中,数组其实就是对象的一种形式,只是写法不同,但是它们的访问机制是一模一样的

用对象模拟数组

	var arr = [1,2,3,4,5];
	var obj = {
	   0:1,
	   1:2,
	   2:3,
	   3:4,
	   4:5
	}
	console.log(arr[2]);
	console.log(obj[2]);

// --------------------------
var obj1 = {
	name: 'a'
}
//底层机制: obj1.name -> obj1['name']
3、稀松数组
var arr = [,,];
console.log(arr);

最后面打了逗号根没打一样

var arr = [,1,3,5,7,];
console.log(arr.length);  // 5
var arr = [,1,3,,,5,7,]; //稀松数组
var arr1 = new Array(1,3,5,7);//用系统内置构造函数构造出来的数组,不能有空值,有空值会报错
																//必须每一位都有值才可以
var arr2 = new Array(5); //[,,,,,] 最后一个逗号必须打,否则前面的逗号就会被忽略
													 //注意:这不是空数组,这个数组里面是有元素的,只不过每个元素都是空
console.log(arr2.length);
var arr = new Array(5.2);  //报错  Invalid array length非法的数组长度

var arr = new Array(a);

console.log(arr.length);  // 报错  a is not defined

var arr = new Array('a');

console.log(arr.length); //1

console.log(arr);  // ["a"]

再次证明数组是对象的另一种形式

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
console.log(arr[10]); //undefined

var obj = {
 0: 1,
 1: 2,
 2: 3,
 3: 4,
 4: 5,
 5: 6,
 6: 7,
 7: 8,
 8: 9,
 9: 10
}

console.log(obj[10]); //undefined
4、添加修改数组元素
var arr = [1,2,3,4,5,6,7,8,9,10];
arr[10] = 'a';
arr[5] = 'b';
console.log(arr);

(二)、数组方法

1、push/unshift

push在数组的最后一位添加元素

unshift在数组的最前面添加元素

push和unshift的返回值,都是执行了方法以后的数组长度

可以一次添加多个元素

var arr = [2, 3, 4];
arr.push(5, 6, 7);
arr.unshift(1, 'a', 'b');
console.log(arr);
2、myPush
function test(){
	console.log(arguments);
}
test(1,2,3);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OYMXSFiH-1638942058633)(/Users/liruize/Library/Application Support/typora-user-images/image-20211208124932762.png)]

var arr = [2, 3, 4];
	
Array.prototype.myPush = function(){
		for(var i = 0; i < arguments.length; i++){
		   this[this.length] = arguments[i];
		}
		return this.length;
}
	
arr.myPush(1, 2, 3);
console.log(arr);

3、pop/shift

pop每次会把数组的最后一个元素剪切掉,返回被剪切掉的元素

shift每次会把数组的第一个元素剪切掉,返回被剪切掉的元素

var arr = ['a', 'b', 'c'];
arr.pop(); //注意,这里不传参数,也不能传参数  就是剪切数组的最后一位,执行一次剪切一次
arr.shift();//剪切第一位  也没有参数
//可以找到我现在剪切是哪一位的数据
var arr = ['a','b','c'];
var str = arr.shift();
console.log(str);

//往往是从后端获取的数据赋值给arr,这个时候根本就不知道里面装的是什么
4、reverse

倒序

var arr = ['a', 'b', 'c'];
arr.reverse();
console.log(arr);
5、splice

arr.splice(开始项的下标,剪切长度,新增的数据)

var arr = ['a', 'b', 'c'];
arr.splice(1,2);
console.log(arr); // ['a']
var arr = ['a', 'b', 'c', 'e'];
arr.splice(3,0,'d')
console.log(arr); // ['a', 'b', 'c', 'd', 'e']
var arr = ['a', 'b', 'c', 'e'];
arr.splice(-1,0,'d')
console.log(arr);  // ['a', 'b', 'c', 'd', 'e']
var arr = ['a', 'b', 'c', 'e'];

function splice(arr,index){
   return index += index >= 0 ? 0 :arr.length;
}

console.log(splice(arr, -1)) //  3  返回的是下标
console.log(arr[splice(arr,0)]);

(三)、数组排序

sort()

返回的是排序以后的数组

数组排序是数组里最牛的方法,只要考数组,这个必考

var arr = [-1, -5, 8, 0, 2];
arr.sort();
console.log(arr); //[-1, -5, 0, 2, 8]
var arr = ['b', 'z', 'h', 'i', 'a'];
arr.sort();
console.log(arr);//["a", "b", "h", "i", "z"];
console.log(arr.sort());//["a", "b", "h", "i", "z"];
//记住:sort()函数返回结果是什么?返回的是排序以后的数组

sort是按照ASCII码来排序的

var arr = [27, 49, 5, 7];
arr.sort();
console.log(arr); //[27, 49, 5, 7]

sort()括号中的函数自己去定义要排序的方法
这个方法有要求:
1、必须有两个参数
2、必须有返回值。
返回值有要求。
如果是负值 a就排在前面,如果是正值,b排在前面,如果是0,保持不动
这在编程里统一的叫冒泡排序法

arr.sort(function(a,b){
   return a - b;
});
var arr = [27, 49, 5, 7];
arr.sort(function(a,b){
 if(a > b){
 		return 1;
 }else{
 		return -1;
 }
});

console.log(arr);  //[5, 7, 27, 49]
1、笔试题

Math.random();

返回介于 0(包含) ~ 1(不包含) 之间的一个随机数:

var arr = [1, 2, 3, 4, 5, 6];
arr.sort(function(a,b){
   var rand = Math.random();
   if(rand - 0.5 > 0){
   		return 1;
   }else{
   	  return -1;
   }
});

console.log(arr);
2、按照年龄生序
   	 var arr = [
        {
          son: 'Jenny',
          age: 18
        },
        {
          son: 'Jone',
          age: 10
        },
        {
          son: 'Ben',
          age: 16
        },
        {
          son: 'Crytal',
          age: 3
        },
        {
          son: 'Lucy',
          age: 11
        }
     ];

     arr.sort(function(a,b){
        if(a.age > b.age){
          return 1;
        }else{
          return -1;
        }

     });

     console.log(arr);
3、按字符串长度生序
    var arr = ['12345', '1', '1234', '12', '1234567'];

    arr.sort(function(a,b){
      if(a.length > b.length){
        return 1;
      }else{
        return -1;
      }
    });

     console.log(arr);
修改原数组的7个方法:push/unshift pop/shift reverse splice sort
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值