原文地址:http://www.cnblogs.com/hbzyin/p/7310716.html

数组Array是Javascript语言中非常重要的两种引用类型数据之一,另外一种为对象Object。Array的数据模型可分为两种进行存储:堆栈结构、队列结构。

昨天,确切说是前天了,去和大学同学见面,请了半天假,顺便去参加了一个面试,结果还不知道;先说说面试中的一些Javascript相关的基本知识。虽然平时工作中也经常用到各种数组相关的方法, 但理解不够深刻,总是容易遗忘,今天趁机再整理一下。

1.数组的基本属性:①length、②prototype、③constructor

  • Array.length : 设置、返回数组中元素的数目;
  • Array.prototype : 设置、返回数组中原型的属性/方法;
  • Array.constructor: 返回次对象的数组函数的引用
var arr1=new Array();
arr1.length=3; //// 1.1. 设置数组的长度
console.log(arr1); //[undefined × 3]
var arr2=[1,2,4]; //// 1.2.返回数组的长度
console.log(arr2.length);//3 Array.prototype.attrName="new attribute"; //// 2.1 设置数组原型的属性
console.log(Array.attrName);//new attribute;
Array.prototype.newFn=function(){ //// 2.2设置数组原型的方法
return "This is a new fn of Array.prptotype.";
}
console.log(Array.newFn()); // This is a new fn of Array.prptotype. Array.constructor.newFunction(); ////返回创建次对象的数组函数;

2. 数组堆栈FILO模型下方法:①push(el) 、②pop()

这两种方法都会导致原数组产生变化,返回值为完成操作之后的数据;

var arr3=['a','b','c'];
arr3.push('d'); // 2.1 堆栈中从**堆栈顶部**添加一个元素--改变原数组
console.log(arr3);//["a","b","c","d"] arr3.pop(1) // 2.2 从堆栈顶部删除数组的最后一个元素--改变原数组
consoel.log(arr3);//["a","b","c"]

3.数组队列模型FIFO下的方法:①push(el)、②shift()、③unshift(el)

var arr4=["d","e","f"];
arr4.push("g"); //// 3.1 在队列末尾添加一个元素--改变原数组
console.log(arr4);//["d","e","f","g"] arr4.shift(1); //// 3.2 在队列头部删除一个元素--改变原数组
console.log(arr4);//["e","f","g"] arr4.unshift("dd"); //// 3.3 在队列头部添加一个元素--改变原数组
console.log(arr4);//["dd","e","f","g"]

4. 数组的排序方法:①sort()、②reverse()

这里需要说明几点:

1. sort方法默认按照圣墟对数组进行排序,即 由小到大升序;

2. sort方法会隐式调用每个数组项的toString()方法,然后比较得到的字符串,最后进行升序排列;如:[0,1,3,10,15].sort();//[0,1,10,15,3];

3. sort方法可传入一个用于比较函数,实际使用中常自定义比较函数function(a,b){return a-b;},若 a-b<0 升序排列;若a-b>0降序排列;a-b=0 原数组不变;

4. reverse方法--其排序方向为 降序排列数组、与sort方向相反;

var arr=[12,13,25,24,27];
arr.sort(); //// 4.1 sort() 默认升序排列
console.log(arr); //[12,13,24,25,27]
arr.reverse(); //// 4.2 reverse() 翻转排序
console.log(arr); //[27,25,24,13,12] var arr=[1,5,13,20,25];
arr.sort(); //// 4.3 sort() 隐式调用toString() 方法后对元素进行比较排序
console.log(arr); //[1,13,20,25,5] arr.sort(function(a,b){ //// 4.4 sort(function(a,b){return fn}) 自定义比较函数
return a-b;
});
console.log(arr); //[1,5,13,20,25]

5. 数组位置方法: ①indexOf(el)、②lastIndexOf(el)

**说明:**此处说明一点,数组位置查找时,采用全等(===)比较进行查找
var arr=["jack","lily","lucy","lily","brown","json"];
var index1=arr.indexOf("lily"); //// 5.1 从头(序号0)开始查找元素
var index2=arr.lastIndexOf("lily"); //// 5.2 从尾部(序号1)开始查找元素
var index3=arr.indexOf("xiaoming");
console.log(index1); // 1
console.log(index2); // 3
console.log(index3); // -1

6. 数组操作方法:

  • 数组合并:①concat()、②join()
var arr5=["a","b","c"];
var arr6=[1,2,3];
var res=arr5.concat(arr6); //// 6.1.1 concat 合并两个数组
console.log(arr5);//["a","b","c"]
console.log(arr6);//[1,2,3]
console.log(res);//["a","b","c",1,2,3] var res6=[...arr5,...arr6]; //// ES6解构方法合并数组 var res2=arr5.join("-"); //// 6.1.2 join 连接数组元素为字符串
console.log(arr5);//["a","b","c"]
console.log(res2);//a-b-c
  • 数组复制(切分):①slice(st[,end])

关于arr.slice(start,end)方法此处说明几点:

1. arr.slice(start,end) : 可传入一个或者两个参数,start 复制数组的起始位置,end数组复制结束的位置;

2. arr.slice(start,end) : 若传入参数start>end,表示数组不进行复制,返回空数组;

3. arr.slice(start,end) : 若传入参数start、end任意一个为负值,则实际复制时改参数值为 argValue=arr.length+该传入值,再进行复制

var arr=[0,1,2,3,4,5,6];
var arr1=arr.slice(1); // 6.2.1 从指定开始位置复制数组
var arr2=arr.slice(1,3); // 6.2.2 从指定的开始、结束位置复制数组
var arr3=arr.slice(-2,2); // 6.2.3 从指定位置(start+arr.length)和结束位置复制数组
  • 全能方法:splice()

关于arr.splice()说明一下几点:

1. arr.splice(arguments)--进行操作时会对原数组造成影响

2. 可用作数组的删除插入替换三类操作;其传入参数有 2个、3个、4个

3. arr.splice(start,num)--从指定位置(start)开始,删除指定个数(num)数组元素;

4. arr.splice(start,DeleteNum,newEl1)--从指定位置(start),删除指定个数元素,并在指定位置(start)插入新元素;

5. arr.splice(start,DeleteNum,newEl1)--在指定位置(start+DeletenNum)用新元素(newEl)替换旧元素;

var names=["lily","lucy","jhon","schwts"];
var name1=names.splice(1,1); //// 6.3.1 从指定位置(start),去删除(num)个数组元素
console.log(name1); // ["lucy"];
console.log(names); // ["lily","jhon","schwts"] // splice()方法会对原数组造成影响 var name2=names.splice(1,1,...["xiaoming"]); //// 6.3.3 从指定位置插入元素
console.log(name1); // ["lucy"];
console.log(names); // ["lily","jhon","schwts"] var names=[1,2,3,4,5,6];
var name=names.splice(2,2,5);
console.log(name); // 1,2,5,5,6;
console.log(names);

__END

Javascript数组(1)--基本属性及方法的更多相关文章

  1. javascript数组常用的遍历方法

    本篇文章给大家带来的内容是关于javascript数组常用的遍历方法(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 前言 本文主要介绍数组常见遍历方法:forEach.m ...

  2. JavaScript 数组(Array)对象的方法

    JavaScript 数组(Array)对象的方法 concat() 描述:用于连接两个或多个数组.该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本. 原型:arrayObject.conc ...

  3. JavaScript数组的22种方法

    原文:http://www.cnblogs.com/xiaohuochai/p/5682621.html javascript中数组的22种方法   前面的话 数组总共有22种方法,本文将其分为对象继 ...

  4. javascript数组的属性、方法和清空-最全!!!(必看)

    今天经理要我从新看一遍js,当我再看<精通js和jquery>这本书时,发现关于数组的这章节讲的很少,于是想自己总结一下数组的常用方法. 定义数组: var arr = new Array ...

  5. Javascript数组Array的forEach方法

    Javascript数组Array的forEach扩展方法 forEach是最常用到的数组扩展方法之一,相当于参数化循环数组,它简单的在数组的每一个元素上应用传入的函数,这也意味着只有存在的元素会被访 ...

  6. 合并JavaScript数组的N种方法

    这是一篇简单的文章,关于JavaScript数组使用的一些技巧.我们将使用不同的方法结合/合并两个JS数组,以及讨论每个方法的优点/缺点. 让我们先考虑下面这情况: var a = [ 1, 2, 3 ...

  7. <JavaScript>数组的sort()方法中比较函数是怎么工作的

    sort()函数比较时调用的是每个数组项的toString()方法,并非按数值大小进行比较,所以往往得不到我们想要的结果. 比如: ,,,,]; values.sort( ); alert(value ...

  8. JavaScript 数组中的 indexOf 方法

    let arr = ['orange', '2016', '2016']; arr.indexOf('orange'); //0 arr.indexOf('o'); //-1 arr.indexOf( ...

  9. 遍历Javascript数组的一种方法!

    应用场景: 如果您的数组只用一次的话就适用这种方法,因为遍历完后数组便清空了.代码如下: var arr=[1,5,6,2,3]; for(;i=arr.shift();){ console.log( ...

随机推荐

  1. MySQL数据库web维护客户端管理工具

    TreeSoft数据库管理系统使用JAVA开发,采用稳定通用的springMVC +JDBC架构,实现基于WEB方式对 MySQL,Oracle,PostgreSQL 等数据库进行维护管理操作. 功能 ...

  2. C语言精要总结-指针系列(二)

    此文为指针系列第二篇: C语言精要总结-指针系列(一) C语言精要总结-指针系列(二) 指针运算 前面提到过指针的解引用运算,除此之外,指针还能进行部分算数运算.关系运算 指针能进行的有意义的算术运算 ...

  3. Reflect(反射)

    反射.反射,程序员的快乐.反射是无处不在的. 那么什么是反射:通过反射,可以在运行时获得程序或程序集中每一个类型(包括类.结构.委托.接口和枚举等)的成员和成员的信息.有了反射,即可对每一个类型了如指 ...

  4. PGI Compiler for OpenACC Output Syntax Highlighting

    PGI Compiler for OpenACC Output Syntax Highlighting When use the PGI compiler to compile codes with ...

  5. Vue.js 基础指令实例讲解(各种数据绑定、表单渲染大总结)——新手入门、高手进阶

    Vue.js 是一套构建用户界面的渐进式框架.他自身不是一个全能框架--只聚焦于视图层.因此它非常容易学习,非常容易与其它库或已有项目整合.在与相关工具和支持库一起使用时,Vue.js 也能完美地驱动 ...

  6. c# ProxyServer 代理服务器 不是很稳定

    /**C# Programming Tips & Techniquesby Charles Wright, Kris Jamsa Publisher: Osborne/McGraw-Hill ...

  7. java在的数据类型

    java数据类型的划分 程序的本质=数据的处理: 数据库的本质=数据的存储. java之中数据类型一共分为两大类. ·基本数据类型: 数值型: 整型:byte,short,int,long 默认值都是 ...

  8. 高级Java程序员的技术进阶之路

      据不完全统计,截至目前(2017.07)为止,中国Java程序员的数量已经超过了100万.而且,随着IT培训业的持续发展和大量的应届毕业生进入社会,Java程序员面临的竞争压力越来越大.那么,作为 ...

  9. OpenCV探索之路(十八):使用imwrite调整保存的图片质量

    近日在用opencv做一些图像处理的操作时,需要对一些高分辨率的图像进行保存.比如,在操作一个容量为230M的图像后,并对该图像保存为JPG格式后,发现图像容量变为80M了!针对这个问题,忙了大半天, ...

  10. Angular基础(一)

    AngularJS有五个主要核心特性,如下介绍: 双向数据绑定 -- 实现了把model与view完全绑定在一起,model变化,view也变化,反之亦然. 模板 -- 在AngularJS中,模板相 ...