<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// //数组练习
// 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 per = new Person("孙悟空", 18);
// var per2 = new Person("zhubajie", 28);
// var per3 = new Person("baigujing", 48);
// var per4 = new Person("erlangshen", 58);
// var per5 = new Person("dadi", 88);
// //将这些person对象放入到一个数组中
// var perArr = [per, per2, per3, per4, per5];
// //创建一个函数,可以将perArr中的满18岁的Person提取出来
// //然后封装到一个新的数组中返回
// //arr
// //形参,要提取信息的数组
// function getAdult(arr) {
// //创建一个新的数组
// var newArr = [];
// // 遍历arr 获取arr中person对象
// for (var i = 0; i < arr.length; i++) {
// var p = arr[i];
// //判断Person对象age是否大于28
// if (p.age >= 30) {
// //大于28 添加到newArr中
// newArr.push(p);
// }
// }
// //将新数组返回
// return newArr;
// }
// var result = getAdult(perArr);
// console.log(result);
// //数组方法 forEach()
// //一般我们用for循环遍历数组 js中提供一个方法,用于遍历数组
// //这个方法只支持IE8以上的浏览器
// //创建一个数组
// var arr = ["asd", "qwe", "zxc"];
// //forEach()方法需要一个函数作为参数
// // --由自己创建,自己不调用,我们称之为回调函数,由浏览器调用
// // --数组中有几个元素,函数就会执行几次 每次执行时 浏览器会将遍历的元素
// // 以实参的形式传递进来 我们可以定义形参来读取这些内容
// // - 浏览器会在回调函数中传递三个参数
// // - 第一个参数 就是当前正在遍历的参数
// // - 第二个参数 就是当前正在遍历元素的索引
// // - 第三个参数 就是正在遍历的数组
// arr.forEach(function(value, index, obj) {
// console.log(value);
// console.log(index);
// console.log(obj);
// });
// //数组方法:slice(start, [end])
// // -- 用于从数组中提取元素
// // -- 给方法不会改变元素数组 而是将截取的元素封装到新的数组中返回
// // --参数:
// // - 1 截取开始位置索引 包含开始索引
// // - 2 截取结束位置索引 不好含结束索引
// // - 第二个参数可以不写,此时从开始索引开始直到全部结束
// //创建数组
// var arr = ["asd", "qwe", "zxc", "iop"];
// var result = arr.slice(0, 2);
// console.log(result);
// result = arr.slice(1);
// console.log(result);
// //参数为负数,表示从数组索引号倒数
// result = arr.slice(1, -1);
// //"qwe", "zxc"
// console.log(result);
// //数组方法: splice(start,num,"string");
// // -- 删除数组中的指定元素
// // -- 会将指定元素在原数组中删除,并返回删除后的新数组
// // - 参数:
// // -- 第一个:表示开始位置的索引
// // -- 第二个:表示删除的数量
// // -- 第三个及以后:传递一些新的元素,这些元素将会自动插入到开始位置索引前面
// // arr.splice(0, 2);
// // result = arr.splice(0, 2);
// //"zxc", "iop" 剩余的元素
// // console.log(arr);
// //"asd", "qwe" 删除的元素
// // console.log(result);
// //一个都不删
// // result = arr.splice(1, 0);
// //返回[]
// // console.log(result);
// result = arr.splice(0, 1, "cvb", "ppp", "ggg");
// console.log(arr);
// //数组去重
// //创建一个元素重复数组
// var arr = [1, 2, 3, 2, 2, 1, 3, 4, 2, 5];
// //获取数组每一个元素
// for (var i = 0; i < arr.length; i++) {
// console.log(arr[i]);
// //获取当前元素后面的元素
// for (var j = i + 1; j < arr.length; j++) {
// console.log("-------" + arr[j]);
// //判断两个值是否相等
// if (arr[i] == arr[j]) {
// //true 则出现相同的元素,删除j
// arr.splice(j, 1);
// //当删除了j所在元素以后,后面元素会自动补位,此时
// //将不会比较这个元素,需要再比较一次这个j所在位置的元素
// //取j自减 当删除一个元素后,j--
// j--;
// }
// }
// }
//return 非重复的数组
// console.log(arr);
//数组其他方法
// -- concat(arr)
// 拼接两个数组,并将新的数组返回
//该方法对原数组产生影响
// var arr = [22, 33, 44];
// var arr1 = [55, 66, 77];
// var arr2 = [88, 99, 100];
// var result = arr.concat(arr1, 123, 234, 432);
// console.log(result);
// -- join()
// - 该方法可以将一个数组转换成字符串 不会对原数组产生影响
// - 将转换后的字符串作为结果返回
// - 在join()中可以指定一个字符串作为参数,这个字符串将会成为数组中元素的连接符
// var result = arr.join("&");
// //return Object
// console.log(typeof arr);
// //返回22&33&44
// console.log(result);
// //返回string
// console.log(typeof result);
//reverse()
// -- 该方法用来反转数组
// - 会直接修改原数组
// arr.reverse();
// console.log(arr);
//sort()
// -- 对数组进行排序
// -- 影响原数组,默认按照Unicode编码进行排序
// -- 即使使用纯数字的数组,使用sort()排序时,也会按照Unicode编码排序
// var arr = ["d", "b", "c", "a"];
// arr.sort();
// // abcd
// console.log(arr);
// arr.reverse();
// console.log(arr);
// arr = [3, 11, 2, 5, 66, 9];
// arr.sort();
// //返回11,2,3,5,66,9
// console.log(arr);
// 如何解决?
//可以自己来指定排序规则
// - 可以在sort()添加一个回调函数,来指定排序规则
// - 回调函数中需要定义2个形参
// - 浏览器将会分别使用数组中的元素作为实参去调用函数
// - 使用那个元素调用不确定,但是数组中a一定在b前面
// - 浏览器会根据回调函数返回值来决定元素顺序
// - 如果返回小于0的值,则元素位置不变
// - 如果返回大于0的值,则元素交换位置
// - 如果返回等于0的值,则认为两个元素相等,也不交换位置
var arr = [5, 14, 3, 2, 5, 3, 2, 6, 8, 9, 0, 3, 12];
arr.sort(function(a, b) {
// if (a > b) {
// return 1;
// } else if (a < b) {
// return -1;
// } else {
// return 0;
// }
//对上面简化 升序排列
//a - b大于0 交换位置,小的去前面,大的去后面,a - b小于0 不交换位置
// 小的保持前面位置 等于也是
return a - b;
//降序排列
// return b - a;
});
// 倒叙排列
console.log(arr);
</script>
</body>
</html>