javascript Array总结

1.  创建

1     var a = [1,2.1,true,‘abc‘]
2
3   var b = new Array()
4
5   var c = new Array(10)
6
7   var d = new Array(1,2.1,true,‘abc‘)

2.   数组为对象,继承Array.prototype,可以创建属性

  负数和非整数索引将自动转化为字符串作为数组的属性

  浮点数和整数相等的将转为整数,作为索引  a[1.00] == a[1]

  不存在“越界“问题,仅仅作为属性

  不连续索引的数组为稀疏数组。足够稀疏的数组通常在实现上比稠密数组更慢、内存利用率更高,查找元素时间与普通对象查找属性一样

  稀疏数组省略的元素默认undefined,

1 var a1 = [,,,]          0 in a1     // false  有地方说为true,测试多次仍是false
2 var a2 = [undefined,,,]    0 in a2   //true
3 a1.length               // 3  数据直接量允许有可选的结尾逗号

3.   设置length为小于当前长度的非负整数n时,当前数组中那些索引大于等于n的值将被删除。

 Object.defineProperty(a1,‘length‘,{writable:false}) //设置数组长度为只读,不能修改
delete a [1] // 不改变数组长度,使用后数组变稀疏数组
1 in a   // false 

4.   遍历优化

1 for(var i=0,len=a.length;i<a;i++){
2     if(!a[i])continue;
3    //dosomething
4 }

5.   Js 不支持真正的多位数组,可以数组中套数组

6.   ES3定义在Array.prototype中的方法

  1)      join(separator) , 通过指定的分隔符进行分隔连接所有元素,分隔符为空时默认为逗号,为String.split()的逆向操作

        var a1 = [1,2,3]

        a1.join(‘+‘)       // 1+2+3

  2)      reverse() ,  颠倒数组中元素的顺序,不是排序, 改变原来的数组,不会创建新的数组。

        var a = [3,5,1]

        a.reverse()       // a = [1,5,3]

  3)  sort(function(a,b){}) ,  对数组的元素进行排序, 改变原来的数组,不会创建新的数组,

           如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。

       要实现这一点,首先把数组的元素都转换成字符串(如有必要),以便进行比较。

           如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。

      比较函数应该具有两个参数 a 和 b,其返回值如下:

          若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。

          若 a 等于 b,则返回 0。

          若 a 大于 b,则返回一个大于 0 的值。

          var a = [3,5,1]

           a.sort(function(a,b){
              return a-b
           })
           // a = [1,3,5]

  4)  concat(item...) ,  方法不会改变现有的数组,创建一个新数组

        var a = [1,2]

        concat(3,[4,[5,6]])  // [1,2,3,4,[5,6]]

  5)  slice(start,end) ,  返回一个包含从 start 到 end (不包括该元素)的新数组,不改变原数组,参数为负数时从尾部计算位置,end可省略

  6)  splice(index,num,item….) ,  向数组中添加/删除元素,返回被删除的元素组成的数组。该方法会改变原始数组,num省略默认删除到末尾

        var a = [1,2,3,4]

        var b = a.splice(1,1,[1],‘b‘)  //a=[1, [1],‘b‘,3,4]   b=[2]

        和concat()不同,splice会插入输入本身

  7)  push()  ,    数组尾部添加一个或多个元素,返回数组新长度

  8)  pop() ,    删除数组最后一个元素,减小数组长度并返回删除的值

  9)  unshift()  ,   和push() 类似,不过是从头部添加

        var a= [1,2]

        a.unshift(4,5)  // [4,5,1,2]  元素为一次性添加,并非逐个

  10)  Shift() ,      和pop()类似,从头部删除

  11)  toString() ,   和 没参数的join()返回值相同

7.   ES5 中的数组方法

      大部分方法第一个参数接收一个函数,数组中每个元素调用一次,稀疏函数中不存在的元素不调用,

    此参数函数有三个参数:数组元素,索引,数组本身,通常只用第一个

1)  forEach(function(value,index,arr){})  ,   从头至尾遍历,所有元素没遍历完无法终止,除非放在try..catch 中并抛出异常

  var a = [1,2,3,4]

         var sum = 0

         a.forEach(function(value){

  sum += value    //累加 , 最终sum=10

         })

  2)  map(function(value,index,arr){})  , 不修改原数组,返回一个新数组,和原数组有相同的长度

  var a = [1,,3]

         var b = a.map(function(value){

  return value*value

         })   // b = [1,,9]

3)  filter(function(value,index,arr){})  ,  不改变原数组,返回调用数组的一个自己,传递的函数用来逻辑判断,如果是true元素将会添加到子集中,

      会跳过稀疏函数中不存在的值,所以返回值都是稠密的

      var dense = sparse.filter(function(){return true})   // 压缩稀疏函数,返回稠密的

  4)  every() ,   当所有元素对传递的函数都返回true时 返回true,否则为false,当其中一个返回false时立即停止遍历并返回false,

       稀疏数组不存在元素不遍历

5)  some() ,   当其中元素对传递的函数都返回true时 返回true,否则为false, 当其中一个返回true时立即停止遍历并返回true,

       稀疏数组不存在元素不遍历

6)  reduce(function(x,y),default) ,   使用指定的函数将数组元素进行组合,生成单个值

    第一次调用function时x为default,接下来x为上次的返回值

    如果default没有指定,x,y 为数组的第一个和第二个元素,如果数组为空则报错

7)  reduceRight 方法和reduce 相似,只是按照数组索引从高到低处理

8)  indexOf(val),   寻找并返回值在数组中的索引,不存在返回-1

9)  lastIndexOf(val) ,  从末尾开始寻找并返回值在数组中的索引,不存在返回-1

8.  判断变量是数组 var a = []

    ES3

   var isArray = Function.isArray || function(o){

    return typeof o === ‘object‘ && Object.prototype.toString.call(o)===‘[object Array]‘

      }

    ES5

      Array.isArray(a)

9.  类数组对象  ,例如arguments,没有继承Array.prototype,不能直接使用数组方法,但是可以通过Function.call()

  var a = {‘0‘:‘a‘,‘1‘:‘b‘,length:2}

  Array.prototype.join.call(a,‘+‘)   // ‘a+b’

   在Firefox 中可以简写为 Array.join(a,’+’),但不是所有浏览器都可以,所以可以修改定义

  Array.join = Array.join || function(a.sep){

  return Array.prototype.join.call(a,sep)

       }

10. ES5中字符串类似只读数组

    var s = ‘javascript‘

console.log(Array.prototype.join.call(s,‘ ‘))  // j a v a s c r i p t

网上寻找 ,精简图

时间: 2024-11-14 19:34:30

javascript Array总结的相关文章

javascript Array学习

首先感谢Dash 我再也不用到处乱找文档了 再次感谢日食记 让我的看到了世界的美好 好的 我们进入正题 注解 我所有的学习心得都建立在ECMAscript5之后 IE9之前的浏览器概不负责 javascript Array是一个好玩的对象 如何检测她呢 首先instanceof是个不错的方法 if (value instanceof Array) { } 不过根据javascript高级程序设计说 这样做 如果一个人重新构造了Array函数 你完了 so 这样 if(Arrays.isArray

JavaScript - Array对象的使用 及 数组排序 sort

<html> <head> <head> <body> <script language="javascript"> // Array对象 // 第一种构造方法 var arr = new Array(); alert(arr.length); arr[0] = 520 ; arr[1] = "wjp" ; alert(arr.length); // 第二种构造方法 // Array(4) ; // 第三种

javascript Array.push pop unshit shit

HTML代码: 1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset="UTF-8"> 6 <title>Document</title> 7 <style type="text/css"> 8 *{font-family:Consolas;font-style: italic} 9 .sh

Javascript Array

Arrays Arrays are zero-indexed, ordered lists of values. They are a handy way to store a set of related items of the same type (such as strings), though in reality, an array can include multiple types of items, including other arrays. To create an ar

JavaScript Array对象介绍

Array 数组 1. 介绍 数组是值的有序集合.每个值叫做一个元素,而每个元素在数组中有一个位置,以数字表示,称为索引.JavaScript数组是无类型:数组元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的类型. --<JavaScript权威指南(第六版)> 2. 定义 var names = new Array("张三", "李四", "王五"); //或者 var names = ["张三",

JavaScript Array(数组)对象

一,定义数组 数组对象用来在单独的变量名中存储一系列的值. 创建 Array 对象的语法: new Array(); new Array(size); new Array(element0, element1, ..., elementn); 参数 参数 size 是期望的数组元素个数.返回的数组,length 字段将被设为 size 的值. 参数 element ..., elementn 是参数列表.当使用这些参数来调用构造函数 Array() 时,新创建的数组的元素就会被初始化为这些值.它

JavaScript Array 对象参考手册

JavaScript Array 对象 Array 对象 Array 对象用于在变量中存储多个值: var cars = ["Saab", "Volvo", "BMW"]; 第一个数组元素的索引值为 0,第二个索引值为 1,以此类推. 更多有关JavaScript Array参考手册请参考 JavaScript Array 对象手册. Array 对象属性 方法 描述 concat() 连接两个或更多的数组,并返回结果. every() 检测数值

Javascript Array Distinct

javascript 没有原生的Distinct功能 . (至少现在还没有)但我们可以通过简单的script 自己实现 . Distinct就是把数组中重复出现2次或以上的值给删除掉,确保数组内每个值都是唯一的 . 我相信大家开始的时候都会和我用同一个方法来处理.那就是开一个新的数组(空),然后 for loop 旧的数组 ,然后复制进去新的数组里面,每次复制进去的时候先检查一篇新数组内是否有了这个值,有了就跳过,没有才加进去 . 代码 :  var old_array = [1, 2, 3,

Javascript Array 非常用方法解析

1. map var ary = Array(3); ary[0] = 2 ary.map(function(elem) { return '1'; }); 结果是["1", undefined * 2], 因为map 只能被初始化过的数组成员调用 2. reduce [].reduce(Math.pow): //typeError, 空数组上调用reduce [3,2,1].reduce(function(x, y) { console.log(x, y); return Math.

JavaScript Array --&gt;map()、filter()、reduce()、forEach()函数的使用

题目: 1.得到 3000 到 3500 之内工资的人. 2.增加一个年龄的字段,并且计算其年龄. 3.打印出每个人的所在城市 4.计算所有人的工资的总和. 测试数据: function getData() { var arr = [{ id: 1, name: 'ohzri', birth: '1999.09.09', city: '湖北', salary: 9379 }, { id: 2, name: 'rqgfd', birth: '1999.10.28', city: '湖北', sal