引用类型之Array

创建

  • Array构造函数
let colors = new Array();
let colors = new Array(20);
let colors = new Array('red','blue');

构造函数创建数组时也可以省略new关键字

  • 字面量
let colors =['red','blue'];
let colors = [];

与对象一样,在使用字面量创建数组时,不会调用 Array构造函数

检测数组

  • instanceof: colors instanceof Array;
  • Array.isArray():Array.isArray(colors);
    对于一个网页 或者一个全局作用域而言,使用insanceof就可以得到想要的结果,一旦存在两个以上不同的全局环境,它不能得到我们想要的结果,因而就出现了Array.isArray()

转换方法

  • valueof():返回数组自身
  • toString():返回由数组中每个值的字符串形式拼接而成的以逗号分隔的字符串
  • toLocaleString():通常也返回数组字符串形式组成的以逗号分隔的字符串
  • join():可以选择使用不同的分隔符来分隔字符串
let colors = ['red','blue'];
let ts = colors.toString();
let tls = colors.toLocaleString();
let v = colors.valueOf();
let j = colors.join(';');

console.log(ts);
console.log(tls);
console.log(v);
console.log(j);
//结果
"red,blue"
"red,blue"
["red", "blue"]
"red;blue"

栈&队列方法

  • pop():从数组末尾移除一项并返回这一项
  • push():从数组末尾添加一项并返回新数组的长度
  • shift():移除数组中的第一项并返回这一项
  • unshift():在数组前端添加项并返回新的数组长度

重排序方法

  • reverse():反转数组项的顺序
  • sort():按照升序排列数组项
let num1= [1,5,3,7,0];
let num2 = [12,21,5,4,0];

console.log(num1.sort());
console.log(num1.reverse());
console.log(num2.sort());
console.log(num2.reverse());
//结果
[0, 1, 3, 5, 7]
[7, 5, 3, 1, 0]
[0, 12, 21, 4, 5]
[5, 4, 21, 12, 0]

在某些情况下这两个方法能满足我们的需求,但有些情况却不可以,因为这两个方法在排序时将数组项都转换成字符串再进行排序,所以对于有些数值不能正确排序
为了解决这个问题,可以sort()方法接收一个比较函数作为参数,以便我们指定哪个值应该排在前边

//比较函数
function compare(value1,value2){
  if(value1 < value2){
    return -1;
  }
  else if(value1>value2){
    return 1;
  }
  else{
    return 0;
  }
}

//当数组项都是数值时,可将比较函数简化为compare1
function compare1(value1,value2){
return value1-value2;
}

let num = [1,23,0,5,7];
let colors = ['red','blue','pink'];

console.log(num.sort(compare));
console.log(colors.sort(compare));
//结果
[0, 1, 5, 7, 23]
["blue", "pink", "red"]

实现逆序只需要在比较函数中调换两个参数即可

操作方法

  • concat():基于当前数组项创建一个新数组,并且将参数中项追加到新数组之后
  • splice():
    • splice(start,count):删除从start位置起始的count项
    • splice(start,count,value):删除从start位置起始的count项并且插入后边的参数

位置方法

  • indexOf():返回指定项在数组中的位置,从前往后找,可指定起始位置
  • lastIndexOf():返回指定项在数组中的位置,从后往前找,可指定起始位置

迭代方法

  • every():对数组中的每一项运行指定函数,若每一项该函数都返回true,则最终返回true
  • filter():对数组中的每一项运行指定函数,返回该函数返回true的项组成的数组
  • forEach():对数组中的每一项运行指定函数,无返回值
  • map():对数组中的每一项运行指定函数,返回每次函数调用的结果组成的数组
  • some():对数组中的每一项运行指定函数,只要有返回true的项则最终返回true,否则返回false
let nums = [1,3,4,6,5];

let evenum = nums.every(function(item,index,array){
  return (item>0);
});

let filnum = nums.filter(function(item,index,array){
  return (item > 3);
});

let mapnum = nums.map(function(item,index,array){
  return item+1;
});

let somenum = nums.some(function(item,index,array){
  return item >5;
});

nums.forEach(function(item,index,array){
  item = item+1;
});

console.log(evenum);
console.log(filnum);
console.log(mapnum);
console.log(somenum);
//结果
true
[4, 6, 5]
[2, 4, 5, 7, 6]
true

归并方法

  • reduce():从前到后迭代数组中的每一项,构建一个最终的返回值
  • reduceRight():从后往前迭代数组中的每一项,构建一个最终的返回值
let nums = [1,3,4,6,5];

let sum = nums.reduce(function(pre,cur,index,array){
  return pre+cur;
});

let sumright = nums.reduce(function(pre,cur,index,array){
  return pre+cur;
});

console.log(sum); //19
console.log(sumright);//19
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容