Array

array.concat(item...);  //产生一个新数组
如果item,是一个数组,那么它的每个元素会被分别添加(浅复制,只解析一层)。
示例:
var a = [1, 3, 4];
var b = [5, 8];
var c = a.concat(b, true, false);
console.log(a);
console.log(b);
console.log(c);
=>1, 3, 4
=>5, 8
=>1, 3, 4, 5, 8, true, false

var a = [1, 3, 4];
var b = [[9, 9], 8];
var c = a.concat(b, true, false);
console.log(a);
console.log(b);
console.log(c);
=>1, 3, 4
=>[9, 9], 8
=>1, 3, 4, [9, 9], 8

array.join(separator);  //将数组中的元素,用separator连接成字符串。separator默认','。在IE6/7中效率优于+号连字符。
示例:
var a = [1, 3, true, 4];
console.log(a.join(''));
console.log(a.join('|'));
console.log(a);
=>13true4
=>1|3|true|4
=>1, 3, true, 4

array.slice(start, end);  //浅复制,[start, end)左闭右开。end默认是array.length,如果start或end为负数,array.length会尝试与其相加。
示例:
var a = [5, 3, 4, 8];
var b = a.slice(1, 3);
var c = a.slice(-2, -1);
var d = a.slice(-2);
console.log(a);
console.log(b);
console.log(c);
console.log(d);
=>5, 3, 4, 8
=>3, 4
=>4
=>4, 8

array.splice(start, deleteCount, item...);  //移除一个或多个元素,并用新的item替换它们。返回一个包含被移除元素的数组。
模拟实现:
Function.prototype.method = function (name, func) {
    this.prototype[name] = func;
    return this;
};
Array.method('splice', function (start, deleteCount) {
    var len = this.length;
    var insertCount = Math.max(arguments.length - 2, 0);
    var gap = insertCount - deleteCount;
    var newLen = this.length + gap;
    var delArr = [];
    var delCountTemp = deleteCount;
    var i = 0;
    var j = 0;
    var k;
    start = start || 0;
    if (start < 0) {
        start = start + len;
    }
    start = Math.max(Math.min(start, len), 0);
    while (delCountTemp > 0) {
        delArr[i] = this[start + i];
        i++;
        delCountTemp--;
    }
    k = len - 1 - (start + deleteCount - 1);  //原数组中需要移动位置的元素个数
    if (gap > 0) {
        while ( k > 0) {
            this[len - 1 + gap - j] = this[len - 1 - j];
            j++;
            k--;
        }
        console.log(newLen);
        this.length = newLen;
    } else if (gap < 0) {
        while (k > 0) {
            this[start + deleteCount - 1 + gap + j + 1] = this[start + deleteCount - 1 + j + 1];
            j++;
            k--;
        }
        this.length = newLen;
    }
    for (i = 0; i < insertCount; i++) {
        this[start + i] = arguments[i + 2];
    }
    return delArr;
});
示例:
var a = [1, 3, 4, 5];
var b = a.splice(1, 1, [22, 4], 'aa');
console.log(a);
console.log(b);
=>1, [22, 4], 'aa', 4, 5
=>3

array.push(item...);  //在数组尾部增加元素,会修改原始array,返回数组长度。当item是一个数组,会将其视为一个元素。
模拟实现:
Function.prototype.method = function (name, func) {
    this.prototype[name] = func;
    return this;
};
Array.method('push', function () {
    this.splice.apply(this, [this.length - 1, 0].concat(Array.prototype.slice.apply(arguments)));
    return this.length;
});
示例:
var a = [1, 3, 4];
var b = [5, 8];
var c = a.push(b, true, false);
console.log(a);
console.log(b);
console.log(c);
=>1, 3, 4, [5, 8], true, false
=>5, 8
=>6

array.pop();  //移除array中最后一个元素并返回该元素。
模拟实现:
Function.prototype.method = function (name, func) {
    this.prototype[name] = func;
    return this;
};
Array.method('pop', function () {
    return this.splice(this.length - 1, 1)[0];  //基于splice实现
});
示例:
var a = [1, 3, true, 4];
var b = a.pop();
console.log(a);
console.log(b);
=>1, 3, true
=>4

array.unshift(item...);  //在数组头部部增加元素,会修改原始array,返回数组长度。当item是一个数组,会将其视为一个元素。IE6中的返回值,永远是undefined。
模拟实现:
Function.prototype.method = function (name, func) {
    this.prototype[name] = func;
    return this;
};
Array.method('unshift', function () {
    this.splice.apply(this, [0, 0].concat(Array.prototype.slice.apply(arguments)));
    return this.length;
});
实例:
var a = [1, 3, 4];
var b = [5, 8];
var c = a.unshift(b, true, false);
console.log(a);
console.log(b);
console.log(c);
=>[5, 8], true, false, 1, 3, 4
=>5, 8
=>6

array.shift();  //移除数组中第一个元素并返回该元素。通常,shift比pop慢得多。
模拟实现:
Function.prototype.method = function (name, func) {
    this.prototype[name] = func;
    return this;
};
Array.method('shift', function () {
    return this.splice(0, 1)[0];  //基于splice实现
});
示例:
var a = [5, 3, 4];
var b = a.shift();
console.log(a);
console.log(b);
=>3, 4
=>5

array.reverse();  //反转数组,返回当前数组。
示例:
var a = [1, 3, 4];
var b = a.reverse();
console.log(a);
console.log(b);
=>4, 3, 1
=>4, 3, 1

array.sort(compareFn);  //默认排序的元素都是字符串。可以自定义比较函数替换默认的比较函数。如果两参数相等,返回0。如果第一个参数应该在前,返回负数。如果第二个参数应该在前,返回正数。
示例:
var a = [5, 6, '31', 'a', 'A', 'ade', 'aDe'];
var b = a.sort();  //按字符串排序
console.log(a);
console.log(b);
=>'31', 5, 6, 'A', 'a', 'aDe', 'ade'
=>'31', 5, 6, 'A', 'a', 'aDe', 'ade'

var a = [3, 5, 11, 8, 33];
var b = a.sort(function (a, b) {//对数字排序
    return a - b;
});
console.log(a);
console.log(b);
=>3, 5, 8, 11, 33
=>3, 5, 8, 11, 33

var a = [5, 6, '3', 'a', 'A', 'ade', 'aDe'];
var b = a.sort(function (a, b) {//对数字和字符串排序
    if (a === b) {
        return 0;
    } else if (typeof a === typeof b) {
        return a < b ? -1 : 1;
    } else {
        return typeof a < typeof b ? -1 : 1;
    }
});
console.log(a);
console.log(b);
=>5, 6, '3', 'A', 'a', 'aDe', 'ade'
=>5, 6, '3', 'A', 'a', 'aDe', 'ade'

var a = [
    {'first': 5, 'second': 'd'},
    {'first': 'dd', 'second': 44},
    {'first': 3, 'second': 'e2'},
    {'first': '3a', 'second': 3}
];
var by = function (name) {//对对象排序,sort方法是不稳定的(两个相等元素的相对位置不固定),因此链式多次调用该by方法,不能保证得到想要的结果。可以使用下面的增强版,来得到想要的结果。
    return function (a, b) {
        var temp1, temp2;
        if (typeof a === 'object' && typeof b === 'object' && a && b) {
            temp1 = a[name];
            temp2 = b[name];    
            if (temp1 === temp2) {
                return 0;
            } else if (typeof temp1 === typeof temp2) {
                return temp1 < temp2 ? -1 : 1;
            } else {
                return typeof temp1 < typeof temp2 ? -1 : 1;
            }
        } else {
            throw {
                'name': '排序出错!',
                'message': '数组含有Object类型的元素'
            };
        }
    };
};
var b = a.sort(by('first'));  
console.log(a);
console.log(b);
=>{'first': 3, 'second': 'e2'},    
  {'first': 5, 'second': 'd'},
  {'first': '3a', 'second': 3},
  {'first': 'dd', 'second': 44}    
=>{'first': 3, 'second': 'e2'},    
  {'first': 5, 'second': 'd'},
  {'first': '3a', 'second': 3},
  {'first': 'dd', 'second': 44}

var a = [
    {'first': 5, 'second': 'd'},
    {'first': 'dd', 'second': 44},
    {'first': 3, 'second': 'e2'},
    {'first': 3, 'second': 3}
];
var by = function (name, minor) {//minor是次级比较函数,在a和b相等时,调用。
    return function (a, b) {
        var temp1, temp2;
        if (typeof a === 'object' && typeof b === 'object' && a && b) {
            temp1 = a[name];
            temp2 = b[name];    
            if (temp1 === temp2) {
                return typeof minor === 'function' ? minor(a, b) : 0;
            } else if (typeof temp1 === typeof temp2) {
                return temp1 < temp2 ? -1 : 1;
            } else {
                return typeof temp1 < typeof temp2 ? -1 : 1;
            }
        } else {
            throw {
                'name': '排序出错!',
                'message': '数组含有Object类型的元素'
            };
        }
    };
};
var b = a.sort(by('first'));  
console.log(a);
console.log(b);
=>{'first': 3, 'second': 3},    
  {'first': 3, 'second': 'e2'},
  {'first': 5, 'second': 'd'},
  {'first': 'dd', 'second': 44}    
=>{'first': 3, 'second': 3},    
  {'first': 3, 'second': 'e2'},
  {'first': 5, 'second': 'd'},
  {'first': 'dd', 'second': 44}

2015-03-22——js常用的Array方法的更多相关文章

  1. js常用的array方法

      1. splice() splice()方法向/从数组中添加/删除项目,然后返回被删除的项目.(注释:该方法会改变原始数组.) arrayObject.splice(index,howmany,i ...

  2. JS常用时间处理方法

    这里会扩展一些JS常用时间处理方法,内置时间对象的方法不再赘述 -- 传送门:http://www.w3school.com.cn/js/jsref_obj_date.asp 时间格式化 -- 转换为 ...

  3. JS常用字符串处理方法应用总结

    这篇文章主要总结了JS常用字符串的处理方法,需要的朋友可以参考下   1.indexOf()方法,从前往后查找字符串位置,大小写敏感,从0开始计数.同理,lastIndexOf() 方法从后往前,两个 ...

  4. js常用几种类方法实现

    js定义类方法的常用几种定义 1 定义方法,方法中包含实现 function createCORSRequest() { var xhr = new XMLHttpRequest(); xhr.onl ...

  5. JavaScript基础 -- js常用内置方法和对象

    JS中常用的内置函数如下: 1.eval(str):计算表达式的结果. 2.parseInt(str,n):将符串转换成整数数字形式(可指定几进制). 3.parseFloat(str):将字符串转换 ...

  6. js常用字符串处理方法

    JS自带函数concat将两个或多个字符的文本组合起来,返回一个新的字符串.var a = "hello";var b = ",world";var c = a ...

  7. js常用的数组方法

    1.创建数组的基本方法:  1.1 空数组  var obj=new Array();                 1.2 指定长度数组  var obj=new Array(size);     ...

  8. js 常用业务工具方法 (es5,es6)持续更新

    数组去重 数组去重最原始的方法就是使用双层循环. es5: // 使用indexOf function unique(array) { var res = []; for (var i = 0, le ...

  9. Js 常用调试的方法

    A  使用alert() 和document.write() 方法监视变量值 如果要中断代码的运行,监视变量的值,则使用alert() 方法: 如果需要查看的值很多,则使用document.write ...

随机推荐

  1. Mac OSX下Go语言开发环境的搭建与配置--使用InteliJ IDEA 13

    折腾了一上午终于把go语言的ide配置好了. 其实GO语言的语法和特性早在去年的时候就学习了一遍.结果后来一直没机会进行开发,结果还是个GO小白.感叹一下,要学好一门编程语言唯一的途径就是多写代码.. ...

  2. NGUI ScrollView中MoveRelative,Scroll的区别

    Scroll会计算边界,和直接拖拽的效果类似 MoveRelative不计算边界,超出边界了也不会管,也不会应用缓动效果

  3. 设置phpcms v9黄页模块作为首页方法

    如果我们根据需要,想把黄页作为单独的网站,我们可以用模块化安装,并且首页设置,那么仿站网就说说详细的步骤.首先,我们需要安装最新版本的phpcms V9其次,下载黄页模块,然后进行根目录的替换.再次, ...

  4. 5.14日学习内容1:jquery表单相关知识

    <script> $comment.animate({height:'+=50'},400);//在原来的基础上加50: $('.smaller').click(function(){ i ...

  5. HDU 1020 Encoding 模拟

    Encoding Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  6. 1. DataBinding - offical tutorial

    1. DataBinding - offical tutorial android DataBinding tutorial 构建环境 数据与布局文件的绑定 data binding 表达式 数据对象 ...

  7. FileMonitorKit 文件操作监控工具

    本人业余时间写的一款文件操作监控工具,功能稳定.效果非常好,有兴趣的网友能够下载玩玩. 下载地址: 32位:http://pan.baidu.com/s/1o64ZFIi          FileM ...

  8. hadoop集群的配置文件

    export JAVA_HOME=/home/hadoop/apps/jdk1..0_131 1.hadoop-env.sh中配置JAVA_HOME export HADOOP_YARN_USER=/ ...

  9. Create a new Docker Machine with the Hyper-V driver

    docker-machine就是docker工具集中提供的用来管理容器化主机的工具,用来管理运行在不同环境的主机,包括:本地虚拟机,远程虚拟机,公有云中的虚拟机都可以通过一个命令统一进行管理. 01. ...

  10. volatile关键字是什么意思

    我写了一段简单的对比代码并分别用vs2017以release方式编译然后用IDA观察汇编代码,如下图所示: 代码1 int a=5; printf("%d",a) 代码2 vola ...