一、对原数组造成影响的api
1.push() 在最后添加
eg: 原数组: var arr = [5, 20, 6, 5, 80, 4]
使用push()之后: arr.push(123); 变为: [5, 20, 6, 5, 80, 4,123]
2.pop() 取出最后一个
eg: 原数组: var arr = [5, 20, 6, 5, 80, 4]
使用pop()之后: arr.pop(); 变为: [5, 20, 6, 5, 80]
3.unshift() 在前面添加
eg: 原数组: var arr = [5, 20, 6, 5, 80, 4]
使用unshift()之后: arr.unshift(123); 变为: [123,5, 20, 6, 5, 80,4]
4.shift() 取出第一个
eg: 原数组: var arr = [5, 20, 6, 5, 80, 4]
使用shift()之后: arr.shift(); 变为: [20, 6, 5, 80,4]
5.sort() 方法,对数组排序
参数为一个回调函数!!!
如果没有参数:则是按照第一位的ascII码排序
eg: 原数组: var arr = [5, 20, 6, 5, 80, 4]
使用sort():
eg: var arrl = [1,2,3,4];
eg: var arrl = [1,2,3,4];
arr.sort(function (val1, val2) {
// return val1-val2; //val1-val2< 0 ,从小到大排列
return val2 - val1; //val1-val2> 0 ,从大到小排列
});
二、不对元素组进行操作
1.concat 数组的拼接 不会对原数组造成影响
eg: var arrl = [1,2,3,4];
var arr2 = [11,12,13,14];
var newArr = arrl.concat(arr2);
console.log(newArr);
运行结果:[1, 2, 3, 4, 11, 12, 13, 14]
2.join("") 将数组分割成字符串,按照所填的字符 不会对原数组造成影响
eg: var arrl = [1,2,3,4];
var arr2=arrl.join("-");
console.log(arr2);
运行结果:1-2-3-4
3.toString 将数组转化为字符串,将数组元素用逗号隔开 不改变原数组
var arr2= arrl.toString();
console.log(arr2);
运行结果:1,2,3,4
4.slice(start,end) 按照下标 数组的截取 不包括end 不会对原数组造成影响
console.log(arrl.slice(0,3));
运行结果:[1, 2, 3]
5.splice(start,deleteCount,arr) 从start开始,删除几个 arr新插入的数组元素 操作的是原数组
eg: var arrl = [1,2,3,4];
arrl.splice(1,2,78)
console.log(arrl);
运行结果:[1, 78, 4]
三、实例
1. 编写函数norepeat(arr) 将数组的重复元素去掉
var arr = [1, 2, 3, 5, 6, 7, 8, 9, 41, 2, 5, 2, 3, 65, 5, 2, 2, 1, 5, 5, 5, 25, 9, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 6, 5, 2, 5, 5, 5, 4, 41, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
function norepeat(arr) {
while (true) {
var flag = true;
for (i = 0; i < arr.length; i++) {
for (j = i + 1; j < arr.length; j++) {
if (arr[i] == arr[j]) {
arr.splice(j, 1);
flag = false;
}
}
}
if (flag == true) {
return arr;
}
}
}
console.log(norepeat(arr));
2. 快速排序
var arr = [5, 2, 8, 4, 3, 6, 1, 7];
function quickSort(arr) {
//递归结束条件
if (arr.length <= 1) {
return arr;
}
//取中间的值以及中间的下标
var midIndex = parseInt(arr.length / 2), //为什么后面是分号,会阻隔数组的定义,而不阻隔 midValue 变量的定义
midValue = arr[midIndex],
leftArr = [],
rightArr = [];
// 遍历arr数组,每一个值和中间的值相比较,大的放右侧数组,小的放左侧数组
for (var i = 0; i < arr.length; i++) {
//如果是中间小标的,跳出本次循环()不用中间值和自身比较
if (i == midIndex) continue;
if (arr[i] <= midValue) {
leftArr.push(arr[i]);
} else {
rightArr.push(arr[i]);
}
}
//利用递归处理左右数组
return quickSort(leftArr).concat(midValue).concat(quickSort(rightArr));
}
console.log(quickSort(arr));