转码日记——Javascript笔记(8)

数组(Array)

数组也是一个对象,和普通对象功能类似。普通对象使用字符串作为属性名,而数组使用数字来作为索引操作。索引:从0开始的整数。数组的存储效率比较高,对属性名没有要求的时候可以使用。

基本应用

//创建数组对象
var arr = new Array();

//向数组中添加对象
//语法:数组[索引] = 值;
arr[0] = 10;
arr[1] = 33;
//如果读取不存在的索引则返回undefined

//获取数组的长度(元素的个数)可以使用length属性 语法:数组.length
console.log(arr.length);
//该方法只适用于连续的数组
//对于非连续的数组使用length,会获得数组最大的索引数+1

//修改数组的长度
arr.length = 10; 
//如果修改的长度大于数组本身的长度,多余的部分将会被空出来;如果修改的小于原长度,多余的部分会被删除

//永远像数组的最后一个位置处加元素
arr.[arr.length] = 70; 

数组字面量

(1)创建数组的方式

//使用数组字面量创建数组
var arr = [];

//可以在创建时就指定数组的元素
var arr = [1,2,3,4,5,6];

//使用构造函数的方式创建数组,也可以同时添加元素,将元素作为构造函数的参数传递即可
var arr2 = new Array(10,20,30);

(2) 当只有一个元素时:

arr = [10]; //创建一个数组,数组中只有一个元素10

arr2 = new Array(10); //创建一个长度为10的数组

(3)数组中的元素可以时任意数据类型

arr = ["hello",3, true, null, undefined];
//可以放对象
var obj = {};
arr[arr.length] = obj; //在数组的最后一位中放入obj
//或者
arr = [{name:"陈"},{name:"李"}];

//也可以是一个函数
arr = [function(){},function(){alert("你好");}];
//也可以直接用数组执行函数
arr[1]();

//也可以是数组
arr = [[1,2,3],[4,5,6]]; //二维数组

数组的四种方法

(1) push( ) — 向数组的末尾添加一个或更多的元素,并返回新的数组长度;可以将要添加的元素作为方法的参数传递,这些元素会自动添加到数组的末尾。

arr.push("汤普森一家", 67);
var result = arr.push("汤普森一家", 67);
console.log(result); //返回一个数字,是数组的长度

(2)pop( ) — 删除并返回数组的最后一个元素,并将删除的元素作为返回值返回

arr = ["hello",3, true, null, undefined];
arr.pop(); //一旦执行这个方法就会删除数组中的最后一个元素, 调一次删除一次
console.log(arr); //返回["hello",3, true, null]
console.log(arr.pop); 返回undefined 返回的是删掉的元素

(3)unshift( ) — 向数组的开头添加一个或更多的元素,并返回新的数组长度;和push( )方法差不多;向前插入元素后,其他元素的索引会依次调整。

(4)shift( ) — 删除并返回数组的第一个元素,并将删除的元素作为返回值返回;和pop( ) 差不多。 

arr = ["hello",3, true, null, undefined];
arr.shift(); 
console.log(arr); //返回[3, true, null, undefined]
console.log(arr.shift); //返回“hello”

数组的遍历 — 将数组中所有的元素都取出来

var arr = ["李华","张蓝","刘红","杨紫"];
for(var i = 0; i< arr.length; i++){
    console.log(arr[i]);
}

数组练习

function Person (name, age){
    this.name= name;
    this.age = age;
    }
//修改person原型的toString()
Person.prototype.toString = function(){
    return "Person[name = " +this.name+", age = " + this.age+"]"
};

//创建一些person对象
var per1 = new Person("孙悟空", 19);
var per2 = new Person("猪八戒", 8);
var per3 = new Person("唐僧", 45);
var per4 = new Person("女儿国国王", 30);
var per5 = new Person("白骨精", 109);

//创建一个数组存放对象
var perArr = [per1, per2, per3, per4, per5]; 

//创建一个函数可以将perArr中满18岁的提取出来,封装到一个新的数组中并返回
function getAdult(arr){ //arr是形参
    //创建一个新的数组
     var newArr = [];
    //遍历arr,获取person中的arr对象
    for(var i =0; i=18){ //arr[i]就是per1,per2...
            newArr.push(arr[i]);
            }
    }
     return newArr; 
}
var result = getAdult(perArr);
console.log(result);

forEach( )方法 — 用来遍历数组,这个方法只支持IE8以上的浏览器

//forEach()方法需要一个函数作为参数
arr.forEach(function(){
});
//像这种由我们创建但是不由我们调用的函数是回调函数
//数组中有几个元素,函数就会被调用几次

arr.forEach(function(a){
    console.log(a);
}); 
//每次执行时,浏览器就会将遍历的元素以实参的形式传递进来,可以定义行参来读取这些元素

//浏览器在回调函数中传递三个参数:1.当前正在遍历的元素 2.当前正在遍历的元素的索引 3.正在遍历的数组

slice( ) — 从某个已有的数组返回选定的元素; 该方法不会改变原数组,而是将截取到的元素封装到一个新数组中返回;

参数:1. 截取开始的位置的索引(包含开始的索引)2. 截取结束的位置的索引(不包括结束的索引),第二个参数如果不写,此时会截取从开始索引一直到最后的索引;

var arr = ["hello",3, true, null, undefined];
var result = arr.slice(0,2);
console.log(result); //返回“hello”,3

var result2 = arr.slice(1,-1); //索引可以传递一个负值,如果传递一个负值,则从后往前计算

splice( ) — 删除数组中的指定元素,并向数组添加新元素;该方法会影响到原数组,会将元素从原数组中删除,并将被删除的元素作为返回值返回

参数:1. 表示开始位置的索引 2.表示删除的数量 3.第三个参数及以后可以传递新的元素,这些元素会自动插入开始位置的索引前

该方法可以删除,替换或添加元素

var arr = ["hello",3, true, null, undefined];
var result = arr.splice(1,2);
console.log(arr); //返回"hello", null, undefined
console.log(result); //返回3,true

var result2 = arr.splice(1,2,"牛魔王",20);
console.log(result2);//返回"hello","牛魔王",20, null, undefined

数组去重练习

var arr = [1,2,3,2,1,3,4,2,5];
for(var i = 0; i< arr.length; i++){ 
    //获取当前元素后的所有元素
    for(var j = i+1; j

数组的剩余方法

(1)contact( ) — 连接两个或多个数组,并将新的数组返回;该方法不会对原数组产生影响。

var arr = ["孙悟空","沙和尚","唐僧"];
var arr2 = ["白骨精","玉兔精","蜘蛛精"];
var arr3 = ["玉皇大帝","金角大王"];
//将数组合并为同一个并返回
var result = arr.contact(arr2,arr3); 
//除了可以传数组,也可以传元素
arr.contact(arr, arr2, "铁扇公主");

(2) join( ) — 将数组转换成一个字符串;该方法不会对原数组产生影响。

var arr = ["孙悟空","沙和尚","唐僧"];
var result = arr.join();

在join( )中默认是逗号隔开,但是可以指定一个字符串作为参数,这个字符串将成为数组中元素的连接符。

var arr = ["孙悟空","沙和尚","唐僧"];
var result = arr.join("hello");
console.log(result);

(3) reverse( ) — 反转数组;该方法会直接修改原数组。

(4) sort( ) — 对数组中的元素排序,默认对unicode编码排序,使用unicode则只会比较第一位数字。

var arr = ["a", "f", "z", "d", "l", "f"];
arr.sort();
console.log(arr); //从小到大排列,返回['a', 'd', 'f', 'f', 'l', 'z']

arr.reverse();
console.log(arr); //从大到小排列,返回['z', 'l', 'f', 'f', 'd', 'a']

但是我们可以自己制定排序的规则。 在sort( )中添加一个回调参数,来制定排序规则,回调函数中需要定义两个形式参数,浏览器将会分别使用数组中的元素作为实参去调用回调函数。

浏览器会根据回调函数返回的返回值来决定元素的顺序,如果返回一个大于0的值,则元素会交换位置;如果是小于0或等于0,则元素位置不变。

      var arr = [5, 4, 9, 10, 6, 1];
      arr.sort(function (a, b) {
            // 前面的大
            if (a > b) {
                return 1; //对调顺序
            } else if (a < b) {
                return -1;
            } else { return 0; }
        }); //用数组中的元素反复作为实参比较

        //如果想要降序排列
        if (a > b) {
            return -1;
        } else if (a < b) {
            return 1;
        } else { return 0; } 

//更简单的办法是返回a-b的值
var arr = [5, 4, 9, 10, 6, 1];
arr.sort(function(a,b){
    return a-b; //升序排列
    return b-a; //降序排列 
});

你可能感兴趣的:(转码日记,数据结构,javascript,前端,开发语言)