数组:
数组的所有方法全来源于Array.prototype
数组的定义:
new Array(length/content)
字面量
var arr = [1, , 2, 3, 4, ''];
var arr = new Array(1, 2, 3, 4, 5);
创建长度为10的空数组只能这么创建
var arr = new Array(10);
var arr = new Array(10.2);
var arr = [10.2];
数组常用的方法:
改变原数组
push,pop,shift,unshift,sort,reverse
splice
push是在数组的最后面添加元素
var arr = [];
arr.push(1, 2, 3, 4, 5, 6, 7, 8);
代码实现push方法
var arr = [1, 2, 3];
Array.prototype.push = function() {
for (var i = 0; i < arguments.length; i++) {
this[this.length] = arguments[i];
}
return this.length;
}
pop:剪切掉数组的最后一位,并且不能传参
arr.pop()
unshift:将元素插入到数组的开始部分,可以添加多位元素
arr.unshift(1,2,3,4);
shift:剪切掉数组的后面 i 位
arr.shift(i)
reverse:将原数组翻转
arr.reverse();
splice:应用非常多,
arr.splice(从第几位开始, 截取多少的长度, 在切口处添加新的数据);
var arr = [1, 1, 2, 2, 3, 3];
arr.splice(1,2);
arr.splice(1,2,0,0,0,0);
栗子:
在第三位上添加一个 4
var arr = [1,2,3,5];
arr.splice(3,0,4);
剪切数组的 -i 位,就是剪切数组的倒数第 i 位
splice = function(pos) {
pos += pos > 0 ? 0 : this.length;
}
sort:将数组中的元素由大到小排序
var arr = [1, 3, 4, 0, -1, 5];
arr.sort()
想要将数组降序排列:
arr.reverse()
var arr = [1, 3, 4, 0, -1, 5];
1.必须写俩形参
2.看返回值:
(1)当返回值为负数时,那么前面的数放在前面
(2)为正数,那么后面的数在前
(3)为 0 ,不动
var arr = [1, 3, 5, 4, 10];
arr.sort(function(a, b) {
return a - b; //升序
return b-a;//降序
// if (a > b) {
// return 1;
// } else {
// return -1;
// }
})
题:给一个有序的数组,乱序
var arr = [1, 2, 3, 4, 5, 6, 7];
arr.sort(function() {
return Math.random() - 0.5;
});
题:给对象里面的元素 age 排序
var cheng = {
name: 'cheng',
age: 18,
sex: 'male',
face: 'handsome',
}
var deng = {
name: 'deng',
age: 40,
sex: undefined,
face: 'amazing',
}
var zhang = {
name: 'zhang',
age: 20,
sex: 'male',
}
var arr = [cheng, deng, zhang];
arr.sort(function(a, b) {
return a.age - b.age;
})
题:按字符串长度排序
var arr = ['ac', 'bcd', 'cccc', 'dddd', 'asdfkhiuqwe', 'asdoifqwoeiur', 'asdf'];
arr.sort(function(a, b) {
return a.length - b.length;
});
题:按字节长度排序
var arr = ['ac等', 'bcd钱多是', 'cccc但有', 'ddddshO数', 'asdfkhiuqwe会议厅', 'asdoif天天先qwoeiur', 'asdf'];
arr.sort(function(a, b) {
return retBytes(a) - retBytes(b);
});
function retBytes(str) {
var num = str.length;
for (var i = 0; i < str.length; i++) {
if (str.charCodeAt(i) > 255) {
num++;
}
}
return num;
}
不改变原数组
concat,join ————> splice,toString,slice
concat:将数组拼接在另一个数组后面,拼完之后的数组是一个全新的数组,原数组并未发生改变
var arr = [1, 2, 3, 4];
var arr1 = [5, 6, 7, 8];
arr.concat(arr1);
slice(从该位开始截取,截取到该位)
slice(1):从第一位开始截取一直截取到最后
slice(-4):从倒数第四位开始截取到最后
slice():整个截取
var arr = [1, 2, 3, 4];
// var arr1 = [5, 6, 7, 8];
var newArr = arr.slice(1, 3);
join:join里面可以传参数,参数必须是字符串形式的,它会将数组里面的元素连接起来,返回一个字符串
arr.join(’-’)
arr.join(’&’)
split:将字符串拆解成数组,按什么拆就把什么拆了
栗子:
var str = '1-2-3-4-5-6-7';
str.split('-');
题:将多个字符串拼接到一起
第一种:
var str = 'alibaba';
var str1 = 'baidu';
var str2 = 'tencent';
var str3 = 'toutiao';
var str4 = 'wangyi';
var str5 = 'xiaowang';
var str6 = 'nv';
var strFinal = '';
//散列
var arr = [str, str1, str2, str3, str4, str5, str6];
for (var i = 0; i < arr.length; i++) {
strFinal += arr[i];
}
第二种:
var str = 'alibaba';
var str1 = 'baidu';
var str2 = 'tencent';
var str3 = 'toutiao';
var str4 = 'wangyi';
var str5 = 'xiaowang';
var str6 = 'nv';
var strFinal = '';
var arr = [str, str1, str2, str3, str4, str5, str6];
console.log(arr.join(''));