1.JavaScript 中创建数组的方法:

(1).使用Array构造函数:

var arr = new Array();    //创建一个空数组
var arr = new Array(5); //传递一个整数时,表示创建了一个长度为 5 的数组,如果传递一个字符串,则表示创建了包含这个字符串的数组
var arr = new Array(5,"abc",20) //传递多个元素时,表示创建了包含这些个元素的数组,有多少元素,长度就为多少

(2).使用数组字面量:

var arr = []    //创建一个空数组
var arr = [,,,,,] //只传递逗号时,表示数组的长度,传递几个逗号,长度为几
var arr = ["abc",2,"123"] //创建一个包含这些元素的数组

2.数组的一些属性和方法:

(1) length:表示数组中元素的数量

var arr = [1,"456","abc"]
console,log(arr.length) //输出3(元素的数量)

(2) prototype:向数组添加属性或方法,添加之后,所有创建出来的数组对象都会有此属性或方法(prototype是个全局属性,不仅可以向数组(数组本身就是对象)添加属性或方法,可以向任何对象添加),示例:

//将创建的数组的值都转换为大写字母
Array.prototype.Cap = function(){
for(var i = 0;i < this.length;i ++){
this[i] = this[i].toUpperCase();
}
}
//创建一个数组,调用Cap()方法
var arr = ["ssdj","df","dsf","s"];
arr.Cap();
//在控制台查看结果
console.log(arr) //输出["SSDJ", "DF", "DSF", "S"]

(3) push():向数组的末尾添加一个或多个元素,并返回新的长度

var arr = [1,"2","abc"];
arr.push("456");
console.log(arr) //输出[1,"2","abc","456"]

(4) unshift():向数组的开头添加一个或多个元素,并返回新的长度

var arr = [1,"2","abc"];
arr.unshift("你好");
console.log(arr) //输出["你好",1,"2","abc"]

(5) pop():删除数组的最后一个元素

var arr = [1,"2","abc"];
arr.pop();
console.log(arr) //输出[1,"2"]

(6) shift():删除数组的第一个元素

var arr = [1,"2","abc"];
arr.shift();
console.log(arr) //输出["2","abc"]
//当数组为空的时候,则返回undefined

(7) *join():把数组的所有元素组成一个字符串,包括数组中的逗号,而join()中传递的参数,就相当于将数组中的逗号换成那个参数

var arr = ["a","b",2,"f"];
console.log(arr.join()) //输出字符串"a,b,2,f"
//当传递参数时
console.log(arr.join("-")) //输出"a-b-2-f"

使用join()实现字符串的重复:

function fun(str,n){
return new Array(n + 1).join(str);
}
console.log(fun("你好",3)) //输出"你好你好你好"
//这里的n就相当于数组中的逗号,new Array(4)就等同于[,,,]

(8) *sort():对数组的元素进行从小到大排序,但是sort()都会将数组中元素转换成字符串再进行比较,包括数值,所以就会出现以下情况:

var arr = [12,5,43,252,3];
arr.sort();
console.log(arr) //输出[12, 252, 3, 43, 5]

解决以上出现的情况,可以创建一个比较函数,然后用sort()调用那个函数

//比较函数可传递两个参数,如果num1位于num2之前,返回一个负数;相等则返回0;num1位于num2之后,返回一个正数
function fun(num1,num2){
if(num1 < num2){
return -1;
}else if(num1 > num2){
return 1;
}else{
return 0;
}
}
var arr = [12,5,43,252,3];
console.log(arr.sort(fun)) //输出[3, 5, 12, 43, 252]
//如果需要进行降序,只需交换一下return的值即可

(9) reverse():反转数组中元素的顺序

var arr = ["a","b",2,"f"]
arr.reverse();
console.log(arr) //输出["f", 2, "b", "a"]

(10) concat():创建一个原数组的副本,并可以添加参数,参数会添加到副本的末尾,且原数组不会有任何改变

var arr = ["a","b",2,"f"]
var arrCopy = arr.concat()
console.log(arrCopy) //输出["a","b",2,"f"],相当于复制了原数组
var arrCopy1 = arr.concat("你好","haha")
console.log(arrCopy1) //输出["a","b",2,"f","你好","haha"]
console,log(arr) //输出原数组,没有发生改变

(11) *slice():截取,创建一个原数组的副本,可添加参数,参数需为数字,数字表示下标,表示从一个数字的下标开始到另一个数字的下标结束(注:不包括结束的下标)

var arr = ["a","b",2,"f","ha"]
// 0 1 2 3 4
//传递一个参数1,表示从1开始截取(包括1)
var arrCopy = arr.slice(1)
console.log(arrCopy) //输出["b", 2, "f","ha"]
//传递两个参数,表示从1开始截取到4结束(包括1,但不包括4)
var arrCopy1 = arr.slice(1,4)
console.log(arrCopy1) //输出["b", 2, "f"]
//当传递的参数为负数时,将负数加上数组的长度length的值来替换该位置的数
var arrCopy2 = arr.slice(1,-1)
console.log(arrCopy2) //输出["b", 2, "f"]
//该数组length值为5,-1+5=4,所以依然是从1开始截取到4结束(不包括4)

(12) *splice():这是个很重要的数组方法,可以向数组中添加,替换或删除元素

删除:可以删除任意数量的元素,指定 2 个参数:(指定的位置,要删除的元素的个数),如果没有第二个参数时,则指定位置后所有元素都会被删除

var arr = [1,3,5,7,9,11];
var arrCopy = arr.splice(1,2) ;
//从1位置开始删除2个元素
console.log(arr) //输出[1, 7, 9, 11]

插入:可以向指定位置插入任意数量的元素,指定 3 个参数:(指定的位置,要删除的元素的个数,要添加的元素)

var arr = [1,3,5,7,9,11];
var arrCopy = arr.splice(1,2,4,"6") ;
//从1位置开始删除2个元素,添加4和"6"
console.log(arr) //输出[1, 4, "6", 7, 9, 11]

(13) indexOf() 和 lastIndexOf()

indexOf:从数组的首字符开始查找数组中元素所在的位置,指定 2 个参数:(要查找的元素,从什么位置开始查找(可选))

var arr1 = [1,3,5,11,7,9,11];
console.log(arr1.indexOf(11)) //输出位置3
console.log(arr1.indexOf(11,4)) //输出位置6,是从第4位置开始检索查找

lastIndexOf:从数组的末尾字符开始查找数组中元素所在的位置,指定的参数同indexOf一样:(要查找的元素,从什么位置开始查找(可选))

var arr1 = [1,3,5,11,7,9,11];
console.log(arr1.lastIndexOf(11)) //输出位置6

(14) map():通过指定函数处理数组的每个元素,最后以数组的形式返回出来

//求下列数组中元素的平方
var arr = [1,2,3,4,5]
var arr2 = arr.map(function(num){
return num*num;
});
console.log(arr2) //输出[1, 4, 9, 16, 25]

(15) every():判断数组中每个元素都是否满足给定的条件,且只有所有元素都满足条件时,才会返回true

var arr = [1,2,3,4,5];
var arr3 = arr.every(function(x){
return x < 8;
})
console.log(arr3) //输出true
//当有任意一个元素不满足条件时,返回false

(16) filter():“过滤”功能,通过指定函数处理数组的每个元素,最后返回满足过滤条件的数组

//查找下列数组中大于15的元素
var arr = [11,22,13,24,15];
var arr4 = arr.filter(function(x){
return x > 15;
})
console.log(arr4) //输出[22, 24]

3.类数组(伪数组):

定义:类数组本质是一个对象,但是可以利用对象和数据的特性,模拟成数组,且必须要含有length属性,示例:

var obj = {
0 : "a",
1 : "b",
2 : 8,
3 : "c",
length : 4,
push : Array.prototype.push, //这个类数组就有了push这个方法
}
obj.push("d") //在数组的末尾添加一个"d"
console.log(obj.length) //此时输出的length为5,表示添加成功

类数组转换为数组,以上面代码为例:

var obj1 = Array.prototype.slice.call(obj)
console.log(obj1) //输出数组["a", "b", 8, "c"]

*下面是一道关于类数组的面试题

var obj = {
"2" : "a",
"3" : "b",
"length" : 2,
"push" : Array.prototype.push
}
obj.push("c");
obj.push("d");
// 问最后这个console.log(obj)输出的是什么?
// 解答:
// "2" : "a", --> 等同于 "0" : "a"
// "3" : "b" --> 等同于 "1" : "b"
// push("c") --> 等同于 "2" : "c"
// push("d") --> 等同于 "3" : "d"
// 所以最后添加上去的"c"和"d"会将之前的"a"和"b"的值覆盖,length的值为4

JavaScript基础-----数组(Array)的更多相关文章

  1. JavaScript中数组Array方法详解

    ECMAScript 3在Array.prototype中定义了一些很有用的操作数组的函数,这意味着这些函数作为任何数组的方法都是可用的. 1.Array.join()方法 Array.join()方 ...

  2. javascript类型系统——数组array

    × 目录 [1]创建 [2]本质 [3]稀疏[4]长度[5]遍历[6]类数组 前面的话 除了对象之外,数组Array类型可能是javascript中最常用的类型了.而且,javascript中的数组与 ...

  3. javascript中数组Array的方法

    一.常用方法(push,pop,unshift,shift,join)push pop栈方法,后进先出var a =[1,2,3];console.log(a.push(40)); //4 返回数组的 ...

  4. 算法与数据结构基础 - 数组(Array)

    数组基础 数组是最基础的数据结构,特点是O(1)时间读取任意下标元素,经常应用于排序(Sort).双指针(Two Pointers).二分查找(Binary Search).动态规划(DP)等算法.顺 ...

  5. javascript基础(Array)

    1,join() Array.join(),不改变原数组,将数组中所有元素转换为字符串并连接在一起,返回最后生成的字符串 let a=[1,2,3]; a.join(); // =>" ...

  6. JavaScript基础数组_布尔值_逻辑运算等(2)

    day51 参考:https://www.cnblogs.com/liwenzhou/p/8004649.html 布尔值(Boolean) 区别于Python,true和false都是小写. var ...

  7. JavaScript中数组Array.sort()排序方法详解

    JavaScript中数组的sort()方法主要用于对数组的元素进行排序.其中,sort()方法有一个可选参数.但是,此参数必须是函数. 数组在调用sort()方法时,如果没有传参将按字母顺序(字符编 ...

  8. JavaScript 基础数组循环和迭代的几种方法

    JavaScript 数组循环和迭代   (之前一直没怎么注意数组循环,今天做一道题时,用到forEach循环发现它并没有按照我想象的样子执行,总结一下数组循环) 一.第一种方法就是for()循环   ...

  9. 《JavaScript》数组Array

    构造函数 var arr1 = new Array();// [] 空数组 var arr2 = new Array(3);//定义长度,0是空数组 var arr3 = new Array(1,2, ...

随机推荐

  1. BNU 28887——A Simple Tree Problem——————【将多子树转化成线段树+区间更新】

    A Simple Tree Problem Time Limit: 3000ms Memory Limit: 65536KB This problem will be judged on ZJU. O ...

  2. bzoj 3716: [PA2014]Muzeum

    Description 吉丽的漫展有n件手办和m名警卫.建立平面直角坐标系,每个手办和警卫都可以看做一个点.警卫们的目光都朝着y轴负方向,且都有相同大小的视角.警卫可以看见自己视角内(包括边界上的点) ...

  3. js控制字符处理

    使用js在对json字符串转json对象时,如果遇到一些控制(特殊)字符会出现转化失败的情况 处理方法:通常我们可以把这些控制字符替换成空 function character(str) { retu ...

  4. VS 游戏:推箱子&对战游戏

    推箱子 //只做了两关 class Program { static void Main(string[] args) { ; ; ; ; ; ; ; #region 地图绘制 , , ] { { { ...

  5. springboot vue组件写的个人博客系统

    个人写的博客管理系统,学习java不到一年 欢迎探讨交流学习 https://github.com/Arsense/ssmBlog  项目地址 如果觉得好的 帮忙star一下 谢谢! 基本技术 环境: ...

  6. kafka自定义序列化器

    <kafka权威指南> Customer.java public class Customer { private int customId; private String custome ...

  7. poi学习

    需要节点  <dependency>  <groupId>org.apache.poi</groupId>  <artifactId>poi</a ...

  8. 【Android】7.0 Intent向下一个活动传递数据、返回数据给上一个活动

    1.0 可以利用Intent吧数据传递给上一个活动,新建一个叫“hellotest01”的项目. 新建活动FirstActivity,勾选“Generate Layout File”和“Launche ...

  9. ArcGIS Enterprise 10.5.1 静默安装部署记录(Centos 7.2 minimal)- 6、总结

    安装小结 安装完成后,首先我们需要将Datastore托管给Server,再将Server托管给Portal以此来完成整个单机版Enterprise 部署流程.为了测试流程是否正确,我们可以采用上传一 ...

  10. 爬楼梯C++

    class Solution {public: /** * @param n: An integer * @return: An integer */ int climbStairs(int n) { ...