一. 数组的浅复制与深复制:

数组之间的复制,由于数组是引用类型,如果是字面量式复制,导致只要是改变其中一个数组的值两者都会发生变化,这种复制叫做浅复制。如果要想复制后不收影响,则需要深复制。深复制就是写一个函数,通过遍历把两者之间的值一一交换。

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数组详解:的更多相关文章

  1. js数组详解

        1,什么是数组 数组是值得有序集合,每个值叫做一个元素,而每个元素在数组中有一个位置,以数字表示,称为索引.js的数组是无类型的,数组元素可以是任意类型,同一个数组中的不同元素可能是对象或数组 ...

  2. js 数组详解(javascript array)

    Array Array 对象用于在单个的变量中存储多个值. 构造函数: 1)   new Array(); 2)   new Array(size); 3)   new Array(element0, ...

  3. js数组详解,js数组操作

    转自 http://www.cnblogs.com/qiantuwuliang/archive/2011/01/08/1930499.html 1.数组的创建 var arrayObj = new A ...

  4. 3.awk数组详解及企业实战案例

    awk数组详解及企业实战案例 3.打印数组: [root@nfs-server test]# awk 'BEGIN{array[1]="zhurui";array[2]=" ...

  5. js对象详解(JavaScript对象深度剖析,深度理解js对象)

    js对象详解(JavaScript对象深度剖析,深度理解js对象) 这算是酝酿很久的一篇文章了. JavaScript作为一个基于对象(没有类的概念)的语言,从入门到精通到放弃一直会被对象这个问题围绕 ...

  6. JavaScript进阶(十)Array 数组详解

    JS array 数组详解 数组的声明方法 arrayObj = new Array(); 的数组 ,并且第一位是5 数组的运算(传地址) var t2=new Array(); t2[0]=1; t ...

  7. (转)awk数组详解及企业实战案例

    awk数组详解及企业实战案例 原文:http://www.cnblogs.com/hackerer/p/5365967.html#_label03.打印数组:1. [root@nfs-server t ...

  8. Java基础之 数组详解

    前言:Java内功心法之数组详解,看完这篇你向Java大神的路上又迈出了一步(有什么问题或者需要资料可以联系我的扣扣:734999078) 数组概念 同一种类型数据的集合.其实数组就是一个容器. 数组 ...

  9. “全栈2019”Java第三十一章:二维数组和多维数组详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

  1. Chrome Foundation Services

    Chrome Foundation Services Contents Overview API Standards Service Directory Structure Dependencies ...

  2. vue单页面前端做非空校验

    form表单 确定按钮 js部分 确定按钮的方法

  3. C#-修改图书借阅管理系统-错误与SQL server 2008错误、复制数据库

    VS2012错误: *)不存在从对象类型 System.Object[] 到已知的托管提供程序本机类型的映射 public DataTable loadData2UserSearch(params o ...

  4. [HNOI2006]超级英雄(二分+网络流)

    [HNOI2006]超级英雄 题目描述 现在电视台有一种节目叫做超级英雄,大概的流程就是每位选手到台上回答主持人的几个问题,然后根据回答问题的多少获得不同数目的奖品或奖金.主持人问题准备了若干道题目, ...

  5. 【转】C# HttpWebRequest提交数据方式

    [转]C# HttpWebRequest提交数据方式 HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择.它们支持一系列有用的属性.这两个类位 于Sy ...

  6. hdu 1024 最大m子段和

    注:摘的老师写的 最大m子段和问题 以-1 4 -2 3 -2 3为例最大子段和是:6最大2子段和是:4+(3-2+3)=8所以,最大子段和和最大m子段和不一样,不能用比如先求一个最大子段和,从序列中 ...

  7. No WebApplicationContext found: no ContextLoaderListener registered?报错解决

    今天跑了下新搭的一个SSI框架. 报例如以下错误: 严重: Exception sending context initialized event to listener instance of cl ...

  8. vector和list容器之间的复制

    #include <iostream> #include <list> #include <string> #include <vector> #inc ...

  9. 杭电1425 sort

    Problem Description 给你n个整数.请按从大到小的顺序输出当中前m大的数.   Input 每组測试数据有两行,第一行有两个数n,m(0<n,m<1000000).第二行 ...

  10. vue2.0-elementUI

    main.js import Vue from 'vue' import App from './App.vue' import ElementUI from 'element-ui' import ...