1.使用冒泡法排序
var arr = [1,5,3,18,9,7,2]; function sort(arr){ for(i in arr){//遍历数组arr,把所有的值都拿一遍,这里产生的i是一个 //string类型,如果使用i的值,需要进行转换, i = parseInt(i); for(var j = i+1; j < arr.length; j++){//用上面的每一个值与下面 //的每一个值进行比较(这里的每一个值都是上面后面的值) if(arr[i] > arr[j]){ temp = arr[j]; arr[j] = arr[i]; arr[i] = temp; } } } return arr; } console.log(sort(arr));//打印调用的结果2.sort()方法排序 对于数组内的数据进行排序,有特定的方法,就是sort()方法
var arr = [1,5,3,18,9,7,2]; arr.sort(function(a,b){ if(a < b){//如果a<b,就让a在b的前面 return -1; } if(a == b){//如果a==b,a,b的位置不变 return 0;} if(a > b){//如果a>b,就让b在a的前面 return 1;} }) console.log(arr);// [1, 2, 3, 5, 7, 9, 18]以上的-1,0,1好像能决定a,b位置关系,那么到底是正负数,还是只能是正负1呢,修改返回的值,如下
var arr = [1,5,3,18,9,7,2]; arr.sort(function(a,b){ if(a < b){ return -5;//这里修改为任意的负值 } if(a == b){//如果a==b,a,b的位置不变 return 0;} if(a > b){ return 4;//这里修改为任意的正值 } }) console.log(arr);// [1, 2, 3, 5, 7, 9, 18]结果没有发生改变,既然是正负决定a,b的位置,那么这个代码就可以简写了
var arr = [1,5,3,18,9,7,2]; arr.sort(function(a,b){ return a - b; //当a < b 的时候,a - b 就会得到一个负值 //当a == b 的时候,a - b 就会得到0 //当a > b 的时候,a - b 就会得到一个正值 }) console.log(arr);// [1, 2, 3, 5, 7, 9, 18]a - b能得到数组升序排列的结果,那么b - a会不会得到相反的结果呢?
var arr = [1,5,3,18,9,7,2]; arr.sort(function(a,b){ return b - a; //当b > a 时, b - a得到的是正值,让 b 在 a 的前面 //当b < a 时, b - a得到的是负值,让 a 在 b 的前面 //也就是说,让值大的在前面,就形成了降序排列 }) console.log(arr);// [18, 9, 7, 5, 3, 2, 1]1.reduce()方法
var arr = [[1,[2,3]],[3,[4,5]],[5,[6,7]]]; var newArr = function (arr) { return arr.reduce(function (p,c) { return p.concat(Array.isArray(c)?newArr(c):c); //这里判断内层的c是否为数组,如果是数组,递归调用,先拍平处理 },[])//这里的空数组,是为了让p第一次值为数组,就不用给p做判断 }; console.log(newArr(arr));2.除了reduce() 方法,还可以使用字符串的方式
var arr = [1,[2,3,[4,5]],[6,7,[8,9]]]; var newArr = []; var str = arr.toString();//1,2,3,4,5,6,7,8,9 // var str = arr.join(',');//join不会改变原数组,这里用join()和toString()是一样的; //把上面的字符串用逗号去截成一个一个的元素 var arr1 = str.split(',');//(9) ["1", "2", "3", "4", "5", "6", "7", "8", "9"] arr1.forEach(function (val,i) { newArr.push(parseInt(val)); });//因为得到的全是字符串,需要用一个循环将每一个转换为Number,再装入新数组 console.log(newArr);//(9) [1, 2, 3, 4, 5, 6, 7, 8, 9]3.可以继续延续reduce()方法的思想,通过递归的方法去做
var arr = [1,[2,3,[4,5]],[6,7,[8,9]]]; var newArr = []; function fun(arr) { arr.forEach(function (val,i) { // return newArr.push(Array.isArray(val)?fun(val):val); if(Array.isArray(val)){//如果你还是一个数组,我就继续把你打开, fun(val); }else {//只有你不在是一个数组的时候,我就把你添加到新数组中 newArr.push(val); } }); return newArr; } console.log(fun(arr));//[1, 2, 3, 4, 5, 6, 7, 8, 9]对象还可以储存复杂的数据,可以通过数组的索引去取每一个对象,再通过 .属性操作获得值
var person = [ {name:'猪八戒',age:20}, {name:'唐僧',age:50}, {name:'孙悟空',age:500}]; console.log(person[0].name);//猪八戒5、构造函数创建
function Person(name,age){ this.name = name;//谁调用,this指向谁 this.age = age; this.sayHello = function(){ console.log('hello'); } } var per1 = new Person('唐僧',18);//per1调用函数,所以this指向per1 console.log(per1.sayHello());//hello6、补充(对象与字符串的转换)
var obj = { name:'aa', age:18 }; var str_obj = JSON.stringify(obj);//将对象转为字符串,转换之后就不能再通过 .属性 的方法来获取值 console.log(str_obj); console.log(str_obj.age);//返回的是undefined //当然字符串也可以转换为对象 var newObj = JSON.parse(str_obj);//将字符串转换为对象 console.log(newObj); console.log(newObj.name);//重新转换回来之后,可以使用属性取值 对象与字符串的转换是为了方便存储和数据传输