JavaScript我学之七数组

本文是金旭亮老师网易云课堂的课程笔记,记录下来,以供备忘。

数组是“多态数组" ,啥都可以放

         //JavaScript中的多态数组
var arr = ["one", 2, true,
function (a, b) { return a + b; },
[1,2,3]
];

数组是一个对象,拥有自己的属性与方法

        //数组是一个对象
console.info(arr);
console.info(arr.length);

访问与写入

访问

         //数组元素通过下标访问
console.info(arr[0]); //one
//调用放在数组中的函数
console.info(arr[3](100, 200));//
//访问放在数组中数组
console.info(arr[arr.length - 1].length);//
//当读取没有内容的位置时,返回undefined
console.info(arr[100]);//undefined

写入:

         var arr2 = [];
//向空数组赋值,将导致数组中添加一个元素
arr2[0] = "Hello";
//读取新加入的元素
console.info(arr2[0].toUpperCase());
//跳着赋值,将导致数组自动地增长
arr2[3] = 3;
console.info(arr2.length);//
console.info(arr2);//["Hello", 3: 3]
//中间的值为undefined
console.info(arr2[1]); //undefined

在尾部追加:

         //自动在尾部追加元素
var arr3 = [];
for (var i = 0; i < 5; i++) {
arr3[arr3.length] = i;
}
//数组内容为:[0, 1, 2, 3, 4]
console.info(arr3);

数组常用方法:

concat  直接连接两个数组的元素。

             var left = [1, 2], right = [3, 4];
console.info(left.concat(right)); //[1,2,3,4]

join  数组中每个元素通过分隔符相连.

         var words = ["锤子", "剪刀", "布"];
var result = words.join('<-->');
//锤子<-->剪刀<-->布
console.info(result);

数组当堆栈:

                    push 入栈
                     pop   出栈
            var m_arr = ['a', 'b', 'c'];
m_arr.push('d');
console.info(m_arr); //["a","b","c","d"]
m_arr.pop();
console.info(m_arr); //["a","b","c"]

开头操作数组元素:

unshift  开头插入

                    shift     删除开头
         var arr = ["a", "b", "c"];
arr.unshift("99");
console.info(arr); //["99", "a", "b", "c"]
var shifted = arr.shift();
console.info(shift); //
console.info(arr); //["a", "b", "c"]

截取:

                    使用slice提取子数组
                    按[起始索引值,结束索引值) 来截取:
             var bigArr = ["a", "b", "c", "d", "e", "f"];
var subArr = bigArr.slice(1, 4);
console.info(subArr); //"b","c","d"

删除元素:

splice  从第n个索引值开始删除m个

              var arr = ["a", "b", "c", "d", "e", "f"];
arr.splice(2, 3); //索引值第2个开始删除3个
console.info(arr); // a, b, f

delete  虽删除但下标犹在.

          var arr = ["a", "b", "c", "d", "e", "f"];
delete arr[2];
console.info(arr); //["a", "b", 3: "d", 4: "e", 5: "f"]
console.info(arr[2]); //undefined

splice有多于2个参数时,就变成删除后再插入元素

             var arr = ["a", "b", "c", "d", "e", "f"];
arr.splice(2, 3,"one","two"); //索引值第2个开始删除3个后再插入 one , two
console.info(arr); // a,b,one,two,f

数组排序:

排序与反转:

             var data = [];
for (i=0 ; i<=6; i++) {
data[data.length] = Math.floor(Math.random() * 100);
}
console.info(data.sort()); //升序
console.info(data.reverse()); //反转

对象数组也排序:

  • 自定义排序的关键在于设计好排序比较函数。
  • 排序是在原数组上进行的.
   //定义一个Person构造函数
function Person(name, age) {
this.name = name;
this.age = age;
};
//定义一个函数,用于输出Person集合中的数据
function printPeople(arr) {
for (var i = 0; i < arr.length; i++) {
console.info(arr[i].name + "有" + arr[i].age + "岁");
}
};
//使用forEach方法,以回调方式遍历处理数组中的元素
function printPeople2(arr) {
//forEach回调函数参数说明:
//value:代表数组中的单个元素
//index:代表数组中此元素对应的索引
//traversedObject:引用被遍历的数组
arr.forEach(function (value, index, traversedObject) {
console.info(value.name + "有" + value.age + "岁");
});
};
//生成测试数据
var people = [];
for (var i = 1; i < 5; i++) {
var age = Math.floor(Math.random() * 100);
people[people.length] = new Person('用户' + i, age);
}
console.info("原始数组:");
printPeople(people);
//自定义排序
//比较函数具有两个参数 a 和 b,其返回值如下:
//若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
//若 a 等于 b,则返回 0。a,b视为相等
//若 a 大于 b,则返回一个大于 0 的值。b应该排在a的后面
people.sort(function (p1, p2) {
if (p1.age > p2.age) return 1;
if (p1.age < p2.age) return -1;
return 0;
});
console.info("排序后的数组:");
printPeople2(people);
上一篇:项目管理实践【三】每日构建【Daily Build Using CruiseControl.NET and MSBuild】


下一篇:Web项目中使用Log4net 案例