前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Javascript数组的常用方法和数据类型检测

Javascript数组的常用方法和数据类型检测

作者头像
江米小枣
发布2020-06-15 14:52:19
6330
发布2020-06-15 14:52:19
举报
文章被收录于专栏:云前端

数组常用的方法

  • 数组的增加、修改、删除
  • 数组的截取和拼接
  • 数组转换为字符串
  • 数组的排序和排列
  • 新增方法

数组的增加、修改、删除

  • push:向数组的末尾增加新的内容
    • 参数:一项或者多项
    • 返回值:新增加后数组的长度
    • 原数组:已经发生了改变
代码语言:javascript
复制
ary.push(10);
//等效于 ary[ary.length] = 10;
//等效于 ary.splice(ary.length, 0, 10);
  • pop:删除数组最后一项的内容
    • 参数:无
    • 返回值:被删除的那一项的内容
    • 原数组:已经发生了改变
代码语言:javascript
复制
ary.pop();
//等效于 ary.length--;
//等效于 ary.length-=1;
//等效于 ary.length=ary.length-1;
//等效于 ary.splice(ary.length-1);
  • unshift:向数组开头增加一项
    • 参数:一项或者多项
    • 返回值:新增加后数组的长度
    • 原数组:已经发生了改变
  • shift:删除数组中的第一项
    • 参数:无
    • 返回值:被删除的那一项的内容
    • 原数组:已经发生了改变 #####splice:它既能实现删除,也能实现增加,还能实现修改
  • [删除]
    • ary.splice(n,m) 从索引n开始,删除m个元素,把删除的内容以一个新数组的方式返回,原来的数组改变
    • ary.splice(n) 从索引n开始,删除到数组的末尾
    • ary.splice(0) 清空数组每一项,把之前的每一项的值以一个新的数组返回,原数组就是空
  • [修改]
    • splice(n,m,x) 从索引n开始,删除m个,用x替换删除的部分,把删除的内容以一个新的数组返回,原来的数组改变
  • [增加]
    • splice(n,0,x) 从索引n开始,把x增加到索引n的前面,返回值是一个空数组,原来的数组改变 ###数组的截取和拼接
  • slice:实现数组的截取,在原来的数组中截取某一部分
    • slice(n,m) 从索引n开始,找到索引为m处(不包含m),将找到的部分已一个新的数组返回,原来的数组不变
    • slice(n) 从索引n开始一直找到数组的末尾
    • slice(0) / slice() 把原来的数组克隆一份一模一样的新数组返回
  • concat:把两个数组拼接到一起,原来的数组不变
    • ary1.concat(ary2) 把ary2和ary1进行拼接,ary2在后面
    • ary1.concat() 把ary1克隆一份一模一样的数组 ###数组转换为字符串
  • toString:把数组转换为字符串,原来的数组不变
代码语言:javascript
复制
var ary = [12, 23, 34, 45];
var res = ary.toString();
console.log(res);//->"12,23,34,45"
  • join:按照每一个分隔符,把数组中的每一项拼接成一个字符串,原来的数组不变
代码语言:javascript
复制
var ary = [12, 23, 34, 45];
var res = ary.join("+");
console.log(res);//->"12+23+34+45"

数组的排序和排列

  • reverse:把数组倒过来排列,原来的数组改变
代码语言:javascript
复制
var ary = [12,3,45,65,5,56,78];
var result = ary.reverse();
console.log(ary); //->[78, 56, 5, 65, 45, 3, 12]
console.log(result); //->[78, 56, 5, 65, 45, 3, 12]
  • sort:给数组进行排序,原有的数组会发生改变
代码语言:javascript
复制
ary.sort() 这样的话只能处理10以内的数字进行排序,因为它是按照UNICODE编码的值进行排序的
ary.sort(function (a, b) {return a - b;}); 由小到大排序
ary.sort(function (a, b) {return b - a;}); 由大到小排序

新增方法

  • indexOf / lastIndexOf 当前内容在数组中第一次/最后一次出现位置的索引,如果数组中没有这一项,返回的结果是-1,如果有这一项,索引是几就返回几,原来的数组不变
  • forEach / map 都是用来遍历数组中的每一项的
代码语言:javascript
复制
forEach:数组中有几项,我们的函数就执行几次;
item->当前遍历的数组中这一项的值 index->当前这一项的索引->原来的数组不变
ary.forEach(function (item, index) {
   console.log(item, index);
});
  • map和forEach的语法是一样的,但是有返回值
代码语言:javascript
复制
var a=new Array(1,2,3,4,5,6);
console.log(a.filter(function(e){
   return e%2==0;
})); // [2, 4, 6]
console.log(a); //[1, 2, 3, 4, 5, 6]
  • filter 返回数组的一个子集,回调函数用于逻辑判断是否返回,返回true则把当前元素加入到返回数组中,false则不加,新数组只包含返回true的值,索引缺失的不包括,原数组保持不变
代码语言:javascript
复制
var ary = [12,34,230,54,34,25,26,14];
var newAry = ary.map(function (item, index) {
   return item * 10;
});
console.log(newAry);//->[120, 340, 2300, 540, 340, 250, 260, 140]
  • every 对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true
代码语言:javascript
复制
var arr=[1,2,3,4,5,4,3,2,1];
var everyResult=arr.every(function(item,index,array){
   return (item>2);
});
console.log(everyResult);//->false
  • some 对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true
代码语言:javascript
复制
var arr=[1,2,3,4,5,4,3,2,1];
var someResult=arr.some(function(item,index,array){
   return (item>2);
});
console.log(someResult);//->true
  • reduce 对数组中的所有元素调用指定的回调函数。该回调函数的返回值为累积结果,并且此返回值在下一次调用该回调函数时作为参数提供
代码语言:javascript
复制
var arr = ["apple","orange","apple","orange","pear","orange"];
function getWordCnt(){
return arr.reduce(function(prev,next){
   prev[next] = (prev[next] + 1) || 1;
   return prev;
},{});}
console.log(getWordCnt());//->{ "apple": 2, "orange": 3, "pear": 1 }
  • isArray 用来判断一个对象是不是数组,跨iframe时也有效
代码语言:javascript
复制
var a = new Array(123);
var b = new Date();
console.log(Array.isArray(a)); //->true
console.log(Array.isArray(b)); //->false

检测数据类型

  • typeof
  • instanceof
  • constructor
  • Object.prototype.toString.call()
typeof
  • 使用typeof检测数据类型,首先返回的都是一个字符串,其次字符串中包含了对应的数据类型,例如:"number"、"string"、"boolean"、"undefined"、"function"、"object"
代码语言:javascript
复制
console.log(typeof 12); //"number"
var num = "abc";
console.log(typeof num); //"string"
console.log(typeof typeof typeof function(){}); //"string"
  • 局限性
    • typeof null ->"object"
    • 不能具体的细分是数组还是正则,还是对象中其他的值,最后返回的结果都是"object"
代码语言:javascript
复制
var ary = [12,34,230,54,34,25,26,14],exp = /^\d$/;
console.log(typeof ary); //"object"
console.log(typeof exp); //"object"
instanceof
  • 检测某一个实例是否属于某个类
代码语言:javascript
复制
var obj = [12, 23];
console.log(obj instanceof Array); //->true
console.log(obj instanceof RegExp); //->false
  • 局限性
    • 不能用来检测和处理字面量方式创建出来的基本数据类型值
    • 只要在当前实例的原型链上,我们用其检测出来的结果都是true
代码语言:javascript
复制
console.log(1 instanceof Number);//->false
console.log(new Number(1) instanceof Number);//->true
var ary = [];
console.log(ary instanceof Array);//->true
console.log(ary instanceof Object);//->true
constructor
  • 构造函数 作用和instanceof非常的相似
代码语言:javascript
复制
var obj = [];
console.log(obj.constructor === Array);//->true
console.log(obj.constructor === RegExp);//->false
  • 与instanceof区别
    • 能用来检测和处理字面量方式创建出来的基本数据类型值
    • 检测Object不一样,一般情况下是检测不了的
代码语言:javascript
复制
var num=1;
console.log(num.constructor===Number);
var reg = /^\d$/;
console.log(reg.constructor === RegExp);//->true
console.log(reg.constructor === Object);//->false
  • 局限性
    • 我们可以把类的原型进行重写,在重写的过程中很有可能出现把之前的constructor给覆盖了,这样检测出来的结果就是不准确的
代码语言:javascript
复制
 function Fn() {}
Fn.prototype = new Array;
var f = new Fn;
console.log(f.constructor);//->Array
Object.prototype.toString.call()
  • 它的作用是返回当前方法的执行主体(方法中this)所属类的详细信息(第一个object代表当前实例是对象数据类型的(这个是固定死的),第二个Object代表的是obj所属的类是)
代码语言:javascript
复制
console.log(Object.prototype.toString.call([]));//->"[object Array]"
console.log(Object.prototype.toString.call(/^$/));//->"[object RegExp]"
console.log(({}).toString.call(new Date));//->"[object Date]"
console.log(Object.prototype.toString.call(1));//->"[object Number]"
console.log(Object.prototype.toString.call("abc"));//->"[object String]"
console.log(Object.prototype.toString.call(true));//->"[object Boolean]"
console.log(Object.prototype.toString.call(null));//->"[object Null]"
console.log(Object.prototype.toString.call(undefined));//->"[object Undefined]"
console.log(Object.prototype.toString.call(function () {
}));//->"[object Function]"function Fn() {}
Fn.prototype = new Array;
var f = new Fn;
console.log(f instanceof Array);//->true
console.log(Object.prototype.toString.call(f) === "[object Array]");//->false

toString方法的理解

  • 对于Number、String、Boolean、Array、RegExp、Date、Function原型上的toString方法都是把当前的数据类型转换为字符串的类型(它们的作用仅仅是用来转换为字符串的)
代码语言:javascript
复制
console.log((128).toString(2/8/10)); ->把数字转换为二进制/八进制/十进制
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-12-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云前端 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数组常用的方法
  • 数组的增加、修改、删除
  • 数组的排序和排列
  • 新增方法
  • 检测数据类型
    • typeof
      • instanceof
        • constructor
          • Object.prototype.toString.call()
          • toString方法的理解
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档