(js)数组方法

数组

声明

var arr1 = []; //数组字面量
var arr2 = new Array(); //不推荐
var arr3 = Array();//不使用 通过系统内置的Array构造函数声明 

稀松数组

var arr = [,1,,,2,3,];
console.log(arr.length);//6 最后一个不算
在原数组上做修改的数组方法

pop、push、

var arr = [2,3,4];
arr.pop();
console.log(arr);//2,3 删除末尾 返回删除的那一项

var arr = [2,3,4];
arr.push(5);
console.log(arr);//2,3,4,5 在末尾添加 返回新的数组长度

末尾添加还可以使用length

var arr = ['rose','jack','mary'];
arr[arr.length] = 'king';
console.log(arr); //["rose", "jack", "mary", "king"]

push的底层实现

var arr = [4,5,6];
Array.prototype.myPush = function() {
  for(var i = 0; i < arguments.length; i++) {
    this[this.length] = arguments[i]; //arguments包含实参列表
  }
  return this.length;
}
arr.myPush(1,2,3);
console.log(arr); //4, 5, 6, 1, 2, 3

shift、unshift

var arr = [2,3,4];
arr.shift();
console.log(arr);//3,4 删除开头 返回删除的那一项

var arr = [2,3,4];
arr.unshift(1);
console.log(arr);//1,2,3,4 开头添加 返回新的数组长度

reverse

splice

//删除并添加
//arr.splice(开始项的下标 包含自己,剪切长度,剪切以后最后一位开始添加数据)
var arr = ['a','b','c'];
arr.splice(1,1,3,4,5); //'a' 3,4,5,'c'
//中间添加
//eg:想要在c后添加d
//方法一:
var arr = ["a", "b", "c","e"];
arr.splice(3,0,'d');//因为开始项包含本身 所以到下一项

//方法二:
var arr = ["a", "b", "c","e"];
arr.splice(-1,0,'d');

下标是如何寻找的?

var arr = ["a", "b", "c","e"];

function splice(arr,index) {
  return index += index >= 0 ? 0 : arr.length ;
}
console.log(arr[splice(arr,-1)]); //e
//如果是正值index就不改变 负值就加长度-1+4=3

sort

按照ascII码来排列

var arr = [27,49,5,7];
arr.sort(function(a,b) {
  return a - b; //升序
  return b - a;//降序
})

随机排序

var arr = [1,2,3,4,5,6];

//Math.random() -> 0~1 开区间 大于0.5 小于等于0.5
arr.sort(function(a,b) {
  var rand = Math.random();
  if(rand -0.5 > 0) {
    return 1; //正数
  }else {
    return -1;
  }
  return Math.random() - 0.5;
})
console.log(arr);

eg:根据对象里的年龄按照升序排序

var person = [
  {
    name:'rose',
    age:13
  },
  {
    name:'jack',
    age:23
  },
  {
    name:'mary',
    age:20
  },
  {
    name:'john',
    age:8
  },
]
person.sort(function(a,b) {
  if(a.age > b.age) {
    return 1;
  }else {
    return -1;
  }
})
console.log(person);

eg:按照字符串的长度排序

var str = ['123','1','1234','12'];
str.sort((a,b) => {
  if(a.length > b.length) {
    return 1;
  }else {
    return -1;
  }
})
console.log(str);//["1", "12", "123", "1234"]

practice:

  1. 用splice重写数组的原型上的unshift方法
  2. 按照字节数排序下列数组[‘我爱你’,‘OK’,‘Hello’,‘你说WHAT’,‘可以’];

concat

合并数组

slice

参数:[start]包含本身被截取、[end]结束的下标

也就是 [start,end)

一个参数:slice()方法返回从该参数指定位置开始到当前数组末尾的所有项。

var arr = ['rose','jack','mary'];
console.log(arr.slice(1)); //["jack", "mary"]

两个参数:该方法返回起始和结束位置之间的项(但不包括结束位置的项)。

var arr1 = [1,2,3,4];
var arr2 = arr1.slice(0,2);
console.log(arr2); // 1,2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值