JS内置数组对象操作
-
数组名.concat()
连接两个或更多的数组 -
数组名.valueOf()
返回数组本身的值,这个一般不用,浏览器会默认调用 -
数组名.toString()
把数组中的所有值转为字符串,并用逗号连接 -
数组名.join()
也是把数组拼接为字符传,用实参传入的字符来连接值,不写默认为逗号 -
Array.isArray(数组名)
检测传入值是否是数组,ES5新增方法,老版浏览器不支持 -
数组名.unShift(值)
从数组开头添加值,添加多个值用逗号隔开。返回值是添加过后的数组的长度 -
数组名.push(值)
从数组结尾添加值,添加多个值用逗号隔开。返回值是添加过后的数组的长度 -
数组名.shift()
从数组开头删除一个值。返回值是被删除的值 -
数组名.pop()
从数组后面删除一个值。返回值是被删除的值 -
数组名.reverse()
把数组里面值的顺序翻转 -
数组名.slice(开始位置,结束位置[不包括结束位置的值])
把数组里的值根据参数截取出来,并放入一个新的数组 -
数组名.splice(开始位置,删除个数,插入值)
从参数开始的位置删除规定个数的值,如果写插入就是在删除值的位置插入,这个是对原数组操作。 - 更多内置方法,找手册查阅
找到数组中某个值出现的所有位置
-
数组名.index(值,查找位置)
这个方法可以查找某个值在数组第一次出现的位置,并返回索引号。查找位置参数值从索引值几开始找,如果找不到会返回-1。 -
数组名.lastIndex(值,查找位置)
这个方法与上面的顺序相反,是反方向来找。 - 通过index()这个方法配合循环还可以找到某个值所有出现的位置。这里使用do while循环,因为必须要找了才知道数组中有没有,所以必须得执行一次
//假设有一个数组
var arr = [x,x,x,x,x,x,x,x,x,x];
//设置查找位置,因为每找到一次这个值后,就不用再找它了,所以要跳过它,就是位置+1,从它的后面一位开始找,又因为初始查找位置肯定是0
var index = -1;
var newArr = [];
do {
newArr.push(arr.index(值,index+1)) ; //把所有出现的位置赋值给新数组,再计算长度,还可以知道出现了多少次
} while( index != -1) //如果返回值为-1就说明找不到,结束循环
- 这样通过循环后,它会找到该值,并返回所有出现的位置。
统计数组中每个元素出现的次数
- 要统计每个元素出现的次,首先肯定是用对象来存放,因为键值对才能清晰的展示
var arr = [x,x,x,x,x,x,x,x,x,x];
//首先需要一个空的对象来装
var obj = {};
for (var i=0; i<arr.length; i++) {
//创建一个临时变量,存在数组的值,也作为对象的键
var temp = arr[i];
//如果循环到的当前值在对象中存在,说明这个值已经出现过一次,则给对象的对应属性的值+1。如果不存在就说明第一次出现,创建一个与当前值同名的对象属性,并为其赋值为1
if(obj[temp]) {
obj[temp] = obj[temp] + 1;
} else {
obj[temp] = 1;
}
}
console.log(obj);
使用递归进行数组快排
/*使用递归快排的原理是把数组中的第一个值取出来作为标杆,然后遍历数组并让它来比较,比它小的放到一个左边数组,比它大的放到一个右边数组
然后左边和右边的数组分别使用同样的方法(递归实现)来进行比较,一直比较到最后,把标杆和左右数组连接起来就是排序好的数组了。*/
var arr = [30,10,29,58,24,45,38,69,73,8];
function arrSort(arr) {
//设置一个递归结束的条件,防止无限递归
//当递归到最后,左右数组都没有值了,说明原数组只剩一个值,直接连接就行了
if(arr.length == 0) {
return [];
}
//创建存放标杆值的临时变量和左右两个数组
var temp = arr[0];
var left = [];
var right = [];
for(var i=1; i<arr.length; i++) {
//如果当前值比标杆值大放入右边数组,反之把标杆值放入左数组
if( temp < arr[i] ) {
right.push( arr[i] );
} else {
left.push( arr[i] );
}
}
/*排序过程:在递归过程中,会先执行arrSort(left)并多次执行比较左右分组,然后又再次递归,直到里面的左右分组没有值,
就返回空值,然后根据分组顺序左+temp+右来连接,这样的结果顺序一定是正确的
然后再执行arrSort(right),执行过程与上面相同,最终返回正确顺序的结果。
最后连接最初的temp,就完成了快排*/
var newArr = arrSort(left).concat(temp, arrSort(right));
return newArr;
}
var arr1 = arrSort(arr);
console.log(arr1);