高程三:Array

一:Array数组

1、Array.isArray(参数) 检测是否是数组,*不兼容IE8,兼容IE9及以上、Chrome、Firefox等,要兼容IE8,可以用

Object.prototype.toString.call([1,2]) == "[object Array]"

2、实例方法:

  1).push(xx,xx,xx,...)  //插入一项或多项到数组的末尾,并修改length

    跟 arr[arr.length] = xxx; 插入类似

var arr = [1,2];
arr.push(3,4);
console.log(arr);    // [1,2,3,4]
arr[arr.length] = 5;
console.log(arr[arr);    //[1,2,3,4,5]

  2).pop()        //从数组末尾移除最后一项,并修改length

  3).shift()        //从数组头部移除第一项

  4).unshift(xx,xx,xx,...)   //从数组头部插入一项或多项

  5).reverse()      //反转数组

var arr = [1,2,3,4,5];
arr.reverse();
console.log(arr);    //[5,4,3,2,1]

  6).sort()    //排序

    1、sort排序时,是把数组每一项toString()转成字符串,然后比较编码,所以:

var arr = [0, 1, 5, 10, 15] ;
arr.sort();
console.log(arr);    //[0, 1, 10, 15, 5]

    2、如果要按数字大小排序,如果做?

var arr = [0, 1, 5, 10, 15] ;
function compare(value1, value2){
    if(value1 < value2){
        return -1;
    }else if(value1 > value2){
        return 1;
    }else{
        return 0;
    }
}
arr.sort(compare);
console.log(arr);    //[ 0, 1, 5, 10, 15 ]

    实际上,可以简写成:

var arr = [0, 1, 5, 10, 15] ;
// value1 - value2 是升序
// value2 - value1 是降序
function compare(value1, value2){
    return value1 - value2;
}
arr.sort(compare);
console.log(arr);    //[ 0, 1, 5, 10, 15 ]

    3、随机打乱数组:

var arr = [0, 1, 5, 10, 15] ;
// Math.random()每次返回的值不一样
function compare(value1, value2){
    return Math.random() - 0.5;
}
arr.sort(compare);
console.log(arr);

    4、根据对象里的某一项,去排序

var arr = [{
    "a": 5,
    "b": "a1"
}, {
    "a": 10,
    "b": "a2"
}, {
    "a": 1,
    "b": "a3"
}];

arr = compare({
    arr: arr,
    prop: ‘a‘,
    type: ‘down‘
});
console.log(arr);

function compare(options) {
    if(typeof options.arr == "array" && options.arr.length == 0){
        return [];
    }

    options.type = options.type || "up";
    var _prop = options.prop;
    options.arr.sort(function(value1, value2){
        if(options.type == "up"){
            return value1[_prop] > value2[_prop];
        }else if(options.type == "down"){
            return value2[_prop] > value1[_prop];
        }
    });

    return options.arr;
}

  7).concat(参数) [返回新数组]

var arr = [1,2];
var arr2 = arr.concat(); //复制功能
console.log(arr2);
var arr3 = arr.concat(arr); //合并数组功能
console.log(arr3);
var arr4 = arr.concat(11,[22,33]); //插入项和合并数组功能
console.log(arr4);

  8).slice( 起始位置, 结束位置*不包括 )[返回新数组]

  截取一个新数组,参数说明:起始和结束位置,从0开始计算;结束位置如果没有,就会截取到最后一个数组项

  9).splice() 数组中最为强大的方法

//1: 删除任意数量的项,splice(从第几项开始, 删除几项)
var arr = [1,2,3,4,5];
arr.splice(1, 2);
console.log(arr);    //[ 1, 4, 5 ]

//2: 向指定位置插入任意数量的项,splice(从第几项开始, 0, 插入项1, 插入项2, ... )
var arr = [1,2,3,4,5];
arr.splice(2, 0, ‘a‘, ‘b‘)
console.log(arr);    //[ 1, 2, ‘a‘, ‘b‘, 3, 4, 5 ]

//3: 向指定位置插入任意数量的项,splice(从第几项开始, 删除几项, 插入项1, 插入项2, ... )
var arr = [1,2,3,4,5];
arr.splice(2, 1, ‘a‘, ‘b‘)
console.log(arr);    //[ 1, 2, ‘a‘, ‘b‘, 4, 5 ]

  注意:splice()方法始终会返回一个新数组,包含从原始数组中删除的项。

  8).indexOf(要查找的项,查找起点位置) 从前向后找; lastIndexOf(要查找的项,查找起点位置) 从后向前找;*不兼容IE8

var arr = [1,2,3,1,2,33,1,44];
var idx = arr.indexOf(1,1);
console.log(idx); //3

var aIdx = [];
var idx = 0;
while((idx = arr.indexOf(1, idx)) != -1){
    aIdx.push(idx);
    idx += 1;
}
console.log(aIdx); // [0, 3, 6]

  9)ES5中的迭代方法,共5个: *IE8及以下不兼容

  every(): 循环给定数组的每一项,如果所有项都满足函数内条件,则返回 true,否则返回 false。不影响原数组。

  most():  循环给定数组的每一项,如果至少有一项满足函数内条件,则返回 true,否则返回 false。不影响原数组。

  filter():  循环给定数组的每一项,返回所有满足函数内条件的数组项,组成一个新数组返回。不影响原数组。

  map():  循环给定数组的每一项,运行给定的函数,返回每次函数调用的结果组成新的数组并返回。不影响原数组。

  forEach():  循环给定数组的每一项,运行给定的函数对原数组项作处理。该方法没有返回值,并影响原数组。

var nums = [1,2,344,55,6,6,32];
var every = nums.every(function(item, index, array){
    return item > 2;
});
console.log(‘every:‘, every); //every: false
var some = nums.some(function(item, index, array){
    return item > 300;
});
console.log(‘some:‘, some); //some: true
var filter = nums.filter(function(item, index, array){
    return item%2==0;
});
console.log(‘filter:‘, filter); //filter: [ 2, 344, 6, 6, 32 ]
var map = nums.map(function(item, index, array){
    return item*2;
});
console.log(‘map:‘, map); //map: [ 2, 4, 688, 110, 12, 12, 64 ]
var forEach = nums.forEach(function(item, index, array){
    if(item < 10){
        array[index] = 10;
    }
});
console.log(‘forEach:‘, nums); //forEach: [ 10, 10, 344, 55, 10, 10, 32 ]
时间: 2024-10-13 12:08:54

高程三:Array的相关文章

Javascript学习总结三(Array对象的用法)

javascript Array对象的常用API 1:concat concat() 方法用于连接两个或多个数组.该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本.举例:var a1 = ['aa','bb'];var a2 = ['cc','dd'];var a3 = a2.concat(a1); 2:every every() 方法用于检测数组所有元素是否都符合指定条件(通过函数提供).every() 方法使用指定函数检测数组中的所有元素:如果数组中检测到有一个元素不满足,则整个表

JavaScript高程三之基础

1.1<script>标签 <script>标签有6个属性: async:可选.表示应该立即下载脚本,但不应妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本.只对外部脚本文件有效. charset:可选.表示通过src属性指定的代码的字符集.由于大多数浏览器会忽略他的值,因此这个属性很少用. defer:可选.表示脚本可以延迟到文档完全被解析和显示之后再执行.只对外部脚本文件有效. language:已废弃. src:可选.表示包含要执行代码的外部文件. type:可选.可

高程(4):执行环境、作用域、上下文执行过程、垃圾收集、try...catch...

高程三 4.2.4.3 一.执行环境 1.全局执行环境是最外层的执行环境. 2.每个函数都有自己的执行环境,执行函数时,函数环境就会被推入一个当前环境栈中,执行完毕,栈将其环境弹出,把控制器返回给之前的执行环境. 二.作用域 1.每个执行环境,都对应一个自己的作用域. 2.每个执行环境,都能访问上一级的父级.父父级....作用域,称为 "作用域链" 3.执行代码时,会按照标识符沿着作用域链一级一级向上查找.如果找不到,则会报错 *标志符:执行时,使用到的变量或函数 三.上下文执行过程

2018-6-3_《ES7的include、ES6的Array.of(),Array.from()及扩展符》

一. ES7的include //ES7,include-查找数组是否包含某个元素 返回布尔 let a=['OB','Koro1',1,NaN]; // let b=a.includes(NaN); // true 识别NaN // let b=a.includes('Koro1',100); // false 超过数组长度 不搜索 // let b=a.includes('Koro1',-3); // true 从倒数第三个元素开始搜索 // let b=a.includes('Koro1'

6,MongoDB 之 Array Object 的特殊操作

相比关系型数据库, Array [1,2,3,4,5] 和 Object { 'name':'DragonFire' } 是MongoDB 比较特殊的类型了 特殊在哪里呢?在他们的操作上又有什么需要注意的呢? 那我们先建立一条数据,包含 Array 和 Object 类型 db.Oldboy.insert({"name":"路飞学城-骑士计划","price":[19800,19500,19000,18800],"other"

javascript 闭包的理解

看过很多谈如何理解闭包的方法,但大多数文章,都是照抄或者解释<Javascript高级程序设计(第三版)>对于闭包的讲解,甚至例程都不约而同的引用高程三181页‘闭包与变量’一节的那个“返回数组各个项,结果各个项的值都相同”的例程,还有些文章的讲解过程上一步与下一步之间的跨度简直就是一步登天,让人反复看半天都无法理解. 闭包的理解需要很多概念做铺垫,包括变量作用域链.执行环境.变量活动对象.引用式垃圾内存收集机制等,如果对本文涉及的这些概念不理解,可以去找本<Javascript高级程序

从原型链看DOM--Document类型

JavaScript通过Document类型表示文档,原型链的继承关系为:document.__proto__->HTMLDocument.prototype->Document.prototype->Node.prototype->EventTarget.prototype Document节点具有下列特征:以下属性均为Node.prototype上的 nodeType值为9 nodeName值为"#document" nodeValue值为null pare

Tcl学习之--语法|变量

[语法|变量] l 脚本.命令和单词 Tcl提供了大约100条命令,Tk提供了另外几十条,脚本包含一条或多条,通过换行符或分号分隔开. set a 12 set b 23 也可以写成一行: set a 12; set b 23 每个命令由多个单词组成,以空格来分隔,首字母为命令名,所以: 1. set -> 单词,同时也是命令名 2. a    -> 单词 3. 12  -> 单词,将该值赋予a l 处理命令 Tcl处理命令分两步: 解析和执行 1)  在解析阶段,Tcl进行一系列简单字

Java从零开始学四十一(反射简述二)

一.实例化Class类对象 实例化Class类对象的方法有三种: 第一种:通过forName()方法 第二种:类.class 第三种:对象.getClass() 二.Class类的常用方法 No. 方法 类型 描述 1 public static Class<?> forName(String className) throws ClassNotFoundException 普通 传入完整的“包.类”名称实例化Class对象 2 public Constructor[] getConstruc