js数组详解:
一. 数组的浅复制与深复制:
数组之间的复制,由于数组是引用类型,如果是字面量式复制,导致只要是改变其中一个数组的值两者都会发生变化,这种复制叫做浅复制。如果要想复制后不收影响,则需要深复制。深复制就是写一个函数,通过遍历把两者之间的值一一交换。
1.浅复制:
var arr = [];
for(var i = 0;i < 10;i++) {
arr.push(i+1);//装了个数而已
}
var array = arr;
arr[0] = 400;
alert(array[0]);//
2.深复制:
function deepCopy(arr1,arr2) {
for(var i = 0;i < arr.length;i++) {
arr2[i] = arr1[i];
}
} var arr = [];
for(var i = 0;i < 10;i++) {
arr.push(i+1);
}
var array = [];
deepCopy(arr,array);
arr[0] = 100;
alert(array[0]);
二. 数组的查找
indexOf();lastIndexOf();用来查找数组中的参数是否存在,如果存在返回该参数的索引,不存在就返回-1;
三. 数组与字符串的转换:
jion()和toString();这两个方法可将数组形式转化成字符串,个元素用逗号隔开;
var arr = ["Wunworld",22,"assassin","intelwisd",67,90];
var array = arr.join();//Wunworld,22,assassin,intelwisd,67,90
var arra = arr.toString();//Wunworld,22,assassin,intelwisd,67,90
四.已有数组创建数组
concat()和splice();方法允许通过已有的数组创建新数组。concat()可以合并多个数组创建一个数组。splice()截取一个数组的子集创建一个数组。splice的一个参数是截取的其实索引值,第二个是截取的长度。
var arr1 = ["assassin",11,1,23,"Wunworld","intelwisd"];
var arr2 = ["wanghaifu","yangxian","son","daughter"];
var arr3 = arr1.concat(arr2);
alert(arr3); var arr = [1,2,3,4,5,6,7,8,9,10];
var array = arr.splice(3,5);
alert(array);//4,5,6,7,8
数组的可变函数:
一. 为数组添加元素:push()和unshift();
push();方法将一个元素添加的数组的尾部,unshift();将一个元素添加到数组的头部。添加元素时同样可以用length属性,arr[arr.leng-X] = 元素;这种插入式的添加很耗性能,添加到某一位时后面的都要后移。
二. 从数组中删除元素:pop()和shift();
pop();删除数组末尾的元素,shift();方法可以删除数组的第一个元素。
三. 从数组的中间位置添加和删除元素
删除数组的第一个元素和在数组开头添加一个元素存在同样的问题————都需要将数组的元素向前或向后移动,这时就用splice();方法:
1.起始索引
2.需要截取的个数(添加元素时0)
3.添加进去的数组元素
var arr1 = [1,2,3,7,8,9];
var arr2 = [4,5,6];
var arr3 = arr1.splice(3,0,arr2);
alert(arr3);//???空??? var arr1 = [1,2,3,7,8,9];
var arr2 = [4,5,6];
arr1.splice(3,0,arr2);
alert(arr1);//1,2,3,4,5,6,7,8,9
splice();用法总结:
1).用于截取数组构成新的数组
var arr = [1,2,3,4,5,6,7,8,9,10];
var array = arr.splice(3,5);
alert(array);//4,5,6,7,8
2).用于添加元素
splice(x,0,arr);//x:起始位置,arr:添加的数组
3).用于删除元素
splice(x,y);//x:起始位置,y:个数
1和3,其实是一样的只是对于不同的数组而言。
四. 数组的排序
reverse();该方法将数组中的元素顺序进行翻转
sort();对于sort()方法最好适用于字符的排序,要是进行数组排序(该方法是按照字典排序),调用一个比较大小的函数,简单的相减操作,一个数组减去另一个数字,如果为负数那么被减数小于减数;。。
function de(n1,n2) {
return n1-n2;
} var arr = [11,3,56,78,990,44,56];
var arr2 = arr.sort(de);
alert(arr2);
另见排序总结:
五.数组的迭代方法;
一).不生成新数组的迭代器方法:
1).forEach();该方法接受一个函数作为参数,对与数组中的每一个元素使用该函数。
function square(num) {
alert(num*num);
}
var arr = [2,3,4,5,6,7];
arr.forEach(square);
2).every();该方法接受一个布尔类型的函数,读数组中的每一个元素使用该函数,如果对于所有的元素,该函数都(整体)返回true;否则false;
function isEven(num) {
return num % 2 == 0;
}
var arr = [2,4,6,8,10];
var even = arr.every(isEven);
if(even) {
alert("this num is even");
}else{
alert("this num is odd");
}//this num is even;
反例:
function isEven(num) {
return num % 2 == 0;
}
var arr = [2,3,10];
var even = arr.every(isEven);
if(even) {
alert("this num is even");
}else{
alert("this num is odd");
}//this num is odd;
两个例子说明every();接受的是一个布尔类型的一个函数,对于函数的整体进行判断。
3).some();该方法与every()方法相似,同样接受一个布尔类型的函数,读取数组的每一个元素,但只要有一个元素为真,则为真。
function isEven(num) {
return num % 2 == 0;
}
var arr = [2,3,5,7];
var even = arr.some(isEven);
if(even) {
alert("this num is even");
}else{
alert("this num is odd");
}//this num is even;
4)1.reduce();该方法接受一个函数,返回一个值,该方法会从一个累加值开始,不断的累加和数组中的后续元素调用该函数,知道数组中的最后一个元素。该函数和add();函数一起,从左到右,依次对数组中的元素求和。
function add(num1,num2) {
return num1+num2;
}
var arr = [1,2,3,4,5,6,7,8,9,10];
var nums = arr.reduce(add);
alert(nums);//
//1+2=3+3=6+4=10+5=15+6=21+7=28+8=36+9=45+10=55
2.reduce();该方法可以吧数组中的元素连接起来;
function add(num1,num2) {
return num1+num2;
}
var arr = ["Wunworld","assassin","is","man"];
var arr2 = arr.reduce(add);
alert(arr2);//Wunworldassassinisman;
3.reduceRight();该方法和reduce()方法相似只是从右往左执行。
二).生成新数组的迭代器方法:
//2016/12/22/
map()和filter();
map();与foreach();相似,该方法是对数组中的每一个元素使用某个函数,map();返回一个新的数组,是对原有的元素使用某一个函数的结果。
var arr = [1,2,3,4,0];
var newArr = arr.map(fn);
function fn(arr) {
return arr+5;
}
console.log(newArr); var str = ["Wunworld","Assassin","Intelwisd"];
var newStr = str.map(fn);
function Fn(str) {
return str[0];
}
alert(newStr);
filter();与every();相似,传入一个返回值为布尔类型的函数。与every()方法不同的是对的数组中的所有元素执行此函数,结果为true时并不返回true,而是返回一个新的数组,该数组包含使用函数后所对应的元素。
二维数组:
通过扩展JavaScript数组对象为其增加了一个新的方法,该方法通过设置传入新的数据设定了数组的行,列,初始值。
Array.matrix = function(rows,cols,initial) {
var arr = [];
for(var i = 0; i < rows; i++) {
var columns = [];
for(var j = 0; j < cols; j++) {
columns[j] = initial;
}
arr[i] = columns;
}
return arr;
}
//接受三个参数,行,列,初始的数据0,先定义一个空数组用来存放列元素,遍历行,再遍历中声明一个空的列数组,再进行遍历列,空的列数组进行初始化的赋值。列元素分别赋值给空数组,外侧返回二维数组即可。
var num = Array.matrix(5,5,0);
alert( num[1][1] );//
num = [ [1,2,3],[4,5,6],[7,8,9] ];
alert( num[1][2] );
层次不齐的函数:JavaScript对层次不起的数组表现很好,通过计算每一行的长度来实现。
eg:
var grades = [ [89,90],[109,109,76],[98,99,140,120,56],[79,70,45,67,99] ];
var totals = 0;
var average = 0.0;
for(var row = 0; row < grades.length; row++) {
for(var col = 0; col < grades[row].length; col++) {
total += grades[row][col];
}
average = total/grades[row].length;
alert( "student"+(row+1)+"average:"+average );
total = 0;
average = 0;
}
js数组详解:的更多相关文章
- js数组详解
1,什么是数组 数组是值得有序集合,每个值叫做一个元素,而每个元素在数组中有一个位置,以数字表示,称为索引.js的数组是无类型的,数组元素可以是任意类型,同一个数组中的不同元素可能是对象或数组 ...
- js 数组详解(javascript array)
Array Array 对象用于在单个的变量中存储多个值. 构造函数: 1) new Array(); 2) new Array(size); 3) new Array(element0, ...
- js数组详解,js数组操作
转自 http://www.cnblogs.com/qiantuwuliang/archive/2011/01/08/1930499.html 1.数组的创建 var arrayObj = new A ...
- 3.awk数组详解及企业实战案例
awk数组详解及企业实战案例 3.打印数组: [root@nfs-server test]# awk 'BEGIN{array[1]="zhurui";array[2]=" ...
- js对象详解(JavaScript对象深度剖析,深度理解js对象)
js对象详解(JavaScript对象深度剖析,深度理解js对象) 这算是酝酿很久的一篇文章了. JavaScript作为一个基于对象(没有类的概念)的语言,从入门到精通到放弃一直会被对象这个问题围绕 ...
- JavaScript进阶(十)Array 数组详解
JS array 数组详解 数组的声明方法 arrayObj = new Array(); 的数组 ,并且第一位是5 数组的运算(传地址) var t2=new Array(); t2[0]=1; t ...
- (转)awk数组详解及企业实战案例
awk数组详解及企业实战案例 原文:http://www.cnblogs.com/hackerer/p/5365967.html#_label03.打印数组:1. [root@nfs-server t ...
- Java基础之 数组详解
前言:Java内功心法之数组详解,看完这篇你向Java大神的路上又迈出了一步(有什么问题或者需要资料可以联系我的扣扣:734999078) 数组概念 同一种类型数据的集合.其实数组就是一个容器. 数组 ...
- “全栈2019”Java第三十一章:二维数组和多维数组详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
随机推荐
- java找出1~1000中素数的三种方式
第一种: public class Sushu { public static void main(String[] args) { // TODO Auto-generated method stu ...
- js实现观察者模式风格替换
如下图,我们看到两种风格:在选择男士时,页面颜色为黑色:在选择女士时,页面颜色为粉红色. 主要可以分为两类: 下拉框 ---> 被观察者 div ---> 观察者 面向过程实现风格替换: ...
- shell清除日志小脚本
#!/bin/bash #清除日志脚本 LOG_DIR=/var/log ROOT_UID=0 #用户id为0的 ,即为root if [ "$UID" -ne "$RO ...
- Redis批量执行(如list批量添加)命令工具 —— pipeline管道应用
前言 Redis使用的是客户端-服务器(CS)模型和请求/响应协议的TCP服务器.这意味着通常情况下一个请求会遵循以下步骤: 使用Redis管道提升性能 (1)客户端向服务端发送一个查询请求,并监听S ...
- Jupyter Notebook 常用的快捷键
Jupyter Notebook 有两种键盘输入模式.编辑模式,允许你往单元中键入代码或文本:这时的单元框线是绿色的.命令模式,键盘输入运行程序命令:这时的单元框线是灰色. Shift+Enter : ...
- CJOI 05新年好 (最短路+枚举)
CJOI 05新年好 (最短路+枚举) 重庆城里有n个车站,m条双向公路连接其中的某些车站.每两个车站最多用一条公路连接,从任何一个车站出发都可以经过一条或者多条公路到达其他车站,但不同的路径需要花费 ...
- 荣耀A55高调上市仅仅为孤独求败?
坦白说.华为近年来在手机市场上确实取得了一些成绩.比方之前P6的出现就凭借超薄的设计.突出的性价比让大家看到了国产手机的新希望.按理说.在手机市场上尝到甜头的华为应该继续坚持低价.亲民的路线, ...
- BZOJ 4236 set乱搞
思路: 取个差 在set里面找 更新 (这个用map更好吧 但是我不会--) //By SiriusRen #include <set> #include <cstdio> # ...
- BZOJ 3211 线段树+并查集
思路: 我们很容易发现 一个数开根号 开几(很小)次 就到了1 1 再怎么开 都是1 由于这个性质 我们就可以用并查集 了 //By SiriusRen #include <cmath> ...
- Zookeeper的单节点集群详细启动步骤
这个很简单,见如下博客. 1 week110的zookeeper的安装 + zookeeper提供少量数据的存储 [hadoop@weekend110 zookeeper-3.4.6]$ pwd/ho ...