JavaScript数组方法

一、基本类型和引用类型

  1. 数值、字符串、布尔值、undefined、null可以直接写出来,比较简单的数据称为基本类型,在比较的时候,是直接按值比较。
  2. 对象、函数、数组复杂的数据是引用类型,在比较的时候,是按照地址比较。
console.log([1] === [1]); //falsevar a = []; //a其实存的是一个空数组的地址 引用
var b = a; //赋值也是 赋的这个引用
console.log(a == b); //turefunction fn(stu){stu.name = "张三"; //此时实参stu和形参stu指向同一个对象,按照地址,找到对象,改变名字stu = {name:"李四"}; //重新给形参stu赋值,和实参以及对象没有关系
}
var stu = {name:"王五"};
fn(stu); //传的是一个引用
console.log(stu.name); //张三
复制代码

二、创建数组

  1. 创建数组的三种办法: new Array(), Array(), [],三种方式创建出来都是一样的。
  2. 数组的length可读可写。
var arr = [];//字面量
var arr = new Array(5); // array 的构造函数 [5] 创造一个空数组 长度为5
var arr = Array(1,2,3,5);// 内建函数  [5] 创造一个空数组 长度为5var arr = [1,2,3,4,5,6,7,8];
arr.length = 0;
console.log(arr);
复制代码

三、数组的常用方法

  1. indexOf:查找数组中是否有待查找的数据,返回索引值,若找不到则返回-1,第二个参数表示从字符串中的哪个位置(索引值)开始搜索。使用的是===,数据类型必须一致,不能是两个复杂数据类型直接比较,但可以用变量查找。
var arr = [3];
var arr1 = [1,2,3,4,5,arr,7,8];
console.log(arr1.indexOf(arr)); //5var arr = [1,2,"3",4,5,6,7,8]; 
console.log(arr.indexOf(3)); //-1
console.log(arr.indexOf(4,-1)); //-1
复制代码
  1. concat:数组的拼接,返回的是一个新数组,不会改变原数组,存储的引用类型为地址。
var arr = [1,2,3,[4]];
var arr1 = [6,7,8];
var arr2 = arr.concat(arr1); 
arr[3][0] = 10;
console.log(arr2);// [1,2,3,[10],6,7,8]
复制代码
  1. join:把数组拼接成字符串,返回新字符串,不会改变原数组,默认用,拼接,接受传参为拼接符号。
var arr = [1,2,3,4,5,6];
var str = arr.join('^');
console.log(str); //1^2^3^4^5^6
复制代码
  1. slice:提取数组的一部分,生成一个新的数组,不会改变原数组,从索引取到索引[)。
var arr = [1,2,3,4,5,6];
console.log(arr.slice(1,3)); //[2,3]//将一个类数组转化为数组的两种方法
function add(){// console.log(arguments);// var arr = [];// for(var i=0;i<arguments.length;i++){//    arr[i] = arguments[i];// }// console.log(arr)// console.log(arguments);var arr = [].slice.call(arguments,0);console.log(arr);
}
add(1,2,3)
复制代码
  1. Array.isArray():判断是否是数组。
  2. reverse:反转数组,改变原数组。
var arr = [1,2,3];
arr.reverse();
console.log(arr); //[3,2,1]
复制代码

四、数组元素的删除和增加

  1. delete:会留下空位。
var arr = [1,2,3,4,5,6,7,8];
for(var i=0; i<arr.length; i++){delete arr[i];
}
console.log(arr); //[empty*8]
复制代码
  1. pop:删除数组的最后一个元素,并且改变了原数组,返回值为删除的那个元素,不能传参。
var arr  = [1,2,3,4,5,6];
console.log(arr.pop()); //6
复制代码
  1. shift:删除数组的第一个元素,并且改变了原数组,返回值为删除的那个元素,不能传参。
var arr  = [1,2,3,4,5,6];
arr.shift();
arr.shift();
console.log(arr); //[3,4,5,6]
复制代码
  1. push:在末尾添加新元素,可以是多个,用逗号分隔,返回值是新数组的长度。
var arr  = [1,2,3,4,5,6];
console.log(arr.push(7,8,[111])); //9
console.log(arr); //[1,2,3,4,5,6,7,8,[111]]var oBox = document.getElementById('box');
var stu = {name:'lisi',age:19};
[].push.call(stu,oBox); //有些数组方法 对象可以借用一下
console.log(stu);
复制代码
  1. unshift:在开始添加新元素,可以是多个,用逗号分隔,返回值是新数组的长度。
var arr  = [1,2,3,4,5,6];
console.log(arr.unshift(7,8,[111]));
console.log(arr); //[7,8,[111],1,2,3,4,5,6]
复制代码
  1. splice:删除/添加元素。arr.splice(index, num, item1, item2.....),index是从哪开始的下标,num是删除的个数,如果是0就不会删除,item可选,表示要添加的元素。
//删除
var arr = [1,2,3,4,5];
arr.splice(2,2);
console.log(arr); //[1,2,5]
//添加
var arr = [1,2,3,4,5];
arr.splice(2,0,"hello");
console.log(arr); //[1,2,"hello",3,4,5]
//删除并添加
var arr = [1,2,3,4,5];
arr.splice(2,1,"hello");
console.log(arr); //[1,2,"hello",4,5]
复制代码

五、数组的排序

  1. sort:改变原数组,将原数组转化为字符串,然后按照Unicode编码进行排序。
var arr = ['我','wangwu','zhaoliu','qianqi','lucy'];
arr.sort();
console.log(arr);
复制代码
  1. sort可以接受一个回调函数,参数是一个函数体,改变排序的规则。
var arr = [156,14,21,2];
arr.sort(function(a,b){return a - b;//如果 a-b>0 表示a>b 交换位置//如果 a-b<0 表示a<b 不交换位置//如果 a-b=0 也不交换位置
});
console.log(arr);
复制代码

六、数组遍历的方法

  1. filter:过滤器,真的留下,假的扔掉。不改变原数组,返回新数组,参数是一个函数。通过自定义的过滤方法,返回新的数组。
var arr = [12,5,8,123,222];
var arr1 = arr.filter(function(item,index,array){return item>12;
})
console.log(arr1);var stu = [{name:'lisi',age:20},{name:'lily',age:18},{name:'lucy',age:22},{name:'hmm',age:30}
];
var newstu = stu.filter(function(item){return item.age>20; 
});
console.log(newstu);
复制代码
  1. map:遍历数组,由回调处理之后的一个新的返回值组成数组。
var number = [1,4,9];
var num = number.map(function(item,index,array){return Math.sqrt(item);
});
//var num = number.map(Math.sqrt);
console.log(num);
复制代码
  1. forEach:通过回调处理接收的参数,无返回值。
var number = [1,4,9];
number.forEach(function(item,index,array){console.log(`a[${index}]=${item}`);
})// for(var i = 0;i < number.length; i++){
// 	console.log(`a[${i}]=${number[i]}`);
// }
复制代码
  1. every所有为真则为真,some有一个为真则为真。every针对所有的回调函数的返回值,如果全为true,则最终结果为true。some针对所有的回调函数的返回值,有一个true,则最终结果为true。
var arr = [1,2,3,4];var bool = arr.some(function(item){return item%2 === 0;
})
console.log(bool);
复制代码

七、数组去重

  1. 使用filter去重。
var arr = ['lisi','lucy','lily','hmm','lisi','lisi','hmm','lucy'];
var arr1 = arr.filter(function(item,index,array){return array.indexOf(item) === index;
})
console.log(arr1);
复制代码
  1. 从后往前遍历,取一个值,将这个值和数组中在这个值前面的每一个元素作比较。
var arr = ['lisi','wangwu','hmm','zhaoliu','wangwu','hmm','hmm','lisi'];
for(var i = arr.length-1; i >= 0; i--){for(var j = i-1; j>=0; j-- ){	if (arr[i] === arr[j]) {arr.splice(i,1);}}
}
console.log(arr);
复制代码
  1. 从前往后依次遍历,根据indexOf判断是不是第一次出现的,若是第一次出现的就是push到新数组。
var arr = [1,2,3,4,5,6,5,4,3,2,1];
var arr2 = [];
for(var i=0;i<arr.length;i++){if( arr2.indexOf( arr[i] ) == -1 ){arr2.push(arr[i]);}
}
alert(arr2);
复制代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/536947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nodejs mysql模块_NodeJs使用Mysql模块实现事务处理

依赖模块&#xff1a;1. mysql&#xff1a;https://github.com/felixge/node-mysqlnpm install mysql --save2. async&#xff1a;https://github.com/caolan/asyncnpm install async --save(ps: async模块可换成其它Promise模块如bluebird、q等)因为Node.js的mysql模块本身对于…

计数排序vs基数排序vs桶排序

从计数排序说起 计数排序是一种非基于元素比较的排序算法&#xff0c;而是将待排序数组元素转化为计数数组的索引值&#xff0c;从而间接使待排序数组具有顺序性。 计数排序的实现一般有两种形式&#xff1a;基于辅助数组和基于桶排序。 基于辅助数组 整个过程包含三个数组&…

多线程中ThreadLocal的使用

*************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 如果以上内容对你觉得有用,并想获取更多的赚钱方式和免费的技术教程 请关注微信公众号:HB荷包 一个能让你学习技术和赚钱方法的公众号,持续更…

mysql 查看所有表的引擎_MySQL查看数据库、表的占用空间大小以及某个库中所有表的引擎类型...

本文章来给大家介绍一些常用的MySQL查看数据库、表的占用空间大小sql命令吧&#xff0c;希望此教程 对各位同学会有所帮助。查看各库的大小代码如下复制代码SELECT SUM(DATA_LENGTH)SUM(INDEX_LENGTH) FROM information_schema.tables WHERE TABLE_SCHEMAdatabase_name;结果是以…

Fusion组件库是如何支持多语言能力的

随着国际化发展&#xff0c;多语言的需求越来越常见&#xff0c;单一的语言已经远不能满足需求了。作为一个组件库&#xff0c;支持多语言也是基本能力。 多语言功能的本质其实是文本的替换&#xff0c;一个词汇“OK”&#xff0c;在英文语境下是“OK”&#xff0c;日语语境下是…

mysql 存储过程 replace_mysql replace存储过程

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航&#xff0c;为用户…

注解版poi操作工具

*************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 如果以上内容对你觉得有用,并想获取更多的赚钱方式和免费的技术教程 请关注微信公众号:HB荷包 一个能让你学习技术和赚钱方法的公众号,持续更…

Kali Linux 2019.1 发布,Metasploit 更新到 5.0 版本

百度智能云 云生态狂欢季 热门云产品1折起>>> Kali Linux 2019.1 发布了&#xff0c;Kali 前身 BackTrack&#xff0c;它是一个基于 Debian 的 Linux 发行版&#xff0c;主要用于信息安全行业&#xff0c;其包含了一系列安全、渗透测试和取证工具。此版本 Linux 内核…

peewee mysql_scrapy中利用peewee插入Mysql

前两天老大布置一个任务&#xff0c;说爬下来的数据要存入数据库中&#xff0c;丢给我一个peewee&#xff0c;说用这个。当时的我两眼一抹黑&#xff0c;这是个什么东西呀&#xff0c;我知道scrapy的数据存入数据库是在pipelines中进行设置但是peewee是什么东西呢。经过两天不懈…

Java版数据结构与算法——线性表

*************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 如果以上内容对你觉得有用,并想获取更多的赚钱方式和免费的技术教程 请关注微信公众号:HB荷包 一个能让你学习技术和赚钱方法的公众号,持续更…

基于 CODING 的 Spring Boot 持续集成项目

本文作者&#xff1a;CODING 用户 - 廖石荣 持续集成的概念 持续集成(Continuous integration,简称 CI&#xff09;是一种软件开发实践&#xff0c;即团队开发成员经常集成他们的工作&#xff0c;通常每个成员每天至少集成一次&#xff0c;也就意味着每天可能会发生多次集成。每…

lvs mysql 端口_LVS配置及多端口服务配置

一、5、各主机IP地址&#xff1a;主机IP网关Client192.168.86.116RouterF0/0:192.168.x.xFo/1:192.168.xx.xxF0/1DirectorEth0:192.168.86.111/24(DIP)Eth0:1:192.168.86.254/32(VIP)F0/1Real 1Eth0:192.168.86.112/24(DIP)lo:1:192.168.86.254/32(VIP)F0/1Real 2Eth0:192.168.…

Mybatis组成部分

*************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 如果以上内容对你觉得有用,并想获取更多的赚钱方式和免费的技术教程 请关注微信公众号:HB荷包 一个能让你学习技术和赚钱方法的公众号,持续更…

Stream流与Lambda表达式(一) 杂谈

一、流 转换为数组、集合 package com.java.design.java8.Stream;import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner;import java.util.A…

一年java工作经验-面试总结

*************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 如果以上内容对你觉得有用,并想获取更多的赚钱方式和免费的技术教程 请关注微信公众号:HB荷包 一个能让你学习技术和赚钱方法的公众号,持续更…

linux mysql python包_03_mysql-python模块, linux环境下python2,python3的

---恢复内容开始---1、Python2 正常[rootIP ~]#pip install mysql-pythonDEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 wont be maintained after that date. A future version of pip will drop …

我的这套VuePress主题你熟悉吧

最近熬了很多个夜晚, 踩坑无数, 终于写出了用VuePress驱动的主题. 只需体验三分钟&#xff0c;你就会跟我一样&#xff0c;爱上这款主题. vuepress-theme-indigo-material, 已经发布到npm, 请客官享用~~ 介绍 vuepress-theme-indigo-material 的原主题是hexo-theme-indigo, git…

两年Java工作经验应该会些什么技术

*************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 如果以上内容对你觉得有用,并想获取更多的赚钱方式和免费的技术教程 请关注微信公众号:HB荷包 一个能让你学习技术和赚钱方法的公众号,持续更…

centos 6 mysql 5.7.13 编译安装_Centos 6.5 下面 源码编译 安装 Mysql 5.7.13

安装软件依赖包yum -y install gcc gcc-c ncurses ncurses-devel cmake下载软件包cd /usr/local/srcwget https://downloads.mysql.com/archives/get/file/mysql-5.7.13.tar.gz --no-check-certificate下载 boost 库&#xff0c;MySQL 5.7.5 开始Boost库是必需的cd /usr/loca…

LeetCode 237. 删除链表中的节点(Python3)

题目&#xff1a; 请编写一个函数&#xff0c;使其可以删除某个链表中给定的&#xff08;非末尾&#xff09;节点&#xff0c;你将只被给定要求被删除的节点。 现有一个链表 -- head [4,5,1,9]&#xff0c;它可以表示为: 示例 1: 输入: head [4,5,1,9], node 5 输出: [4,1,9…