indexOf数组元素索引,并返回元素索引,不存在返回-1,索引从0开始
var num_ = ['a','b','c','d','e'];
num_.indexOf('a');//0
num_.indexOf(a);//-1
num_.indexOf('f');//-1
num_.indexOf('e');//4
一、添加数组push
添加最后一个元素,针对老数组最后一个元素后面添加一个元素,新数组返回元素个数
var arr8=["a","b","c"];
var arr9=arr8.push("d");
console.log(arr8); //["a","b","c","d"];
console.log(arr9); // 4
输出结果:
arry.push(2);//放入number 2
arry.push('3');//放入string 3
这是数组是依次在后面添加,index依次递增
$.inArray()函数用于在数组中搜索指定的值,并返回其索引值。如果数组中不存在该值,则返回-1;
二、查找数组中的某个元素
1、知道下标获取值var element = arry[index];
2、知道值获取下标var index = $.inArry(element,arry);
如:
var arr = [ 4, "Pete", 8, "John" ];
$.inArray( "John", arr ) //返回3
三、合并数组 merge 、concat
1、$.merge()
操作形成一个数组,其中包含两个数组的所有元素。追加到第一个数组中的第二个数组元素的顺序会被保留
var arr1=[1,'hello',3,'joy',5]
var arr2=[6,'name',7,'people',8]
dataAll = $.merge(arr1,arr2);//合并数据
console.log(arr1);
console.log(arr2);
console.log(dataAll);
输出结果:
如果要分开的话
var arr1=[1,'hello',3,'joy',5]
var arr2=[6,'name',7,'people',8]
//dataAll = $.merge(arr1,arr2);//合并数据
dataAll = $.merge( $.merge([],arr1), arr2);
console.log(arr1);
console.log(arr2);
console.log(dataAll);
2、concat() 方法用于连接两个或多个数组。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本
var arr1=[1,'hello',3,'joy',5]
var arr2=[6,'name',7,'people',8]
dataAll = arr1.concat(arr2);//合并数据
console.log(arr1);
console.log(arr2);
console.log(dataAll);
结果:
四、数组去重方法
1、双层循环,外层循环元素内层循环时比较值
2、利用splice直接在原数组进行操作,双层循环,外层循环元素内层循环时比较值值相同则删去,删除元素后,数组长度也减一;
优点:简单易懂,缺点:占用内存高,速度慢
3、利用对象的属性不能相同的特点进行去重
4、数组递归去重
5、利用indexOf以及forEach
6、利用ES6的set,set数据结构类似于数组,其成员的值都是唯一的
例子:
Array.prototype.distinct = function (){
var arr = this,
result = [],
len = arr.length;
arr.forEach(function(v,i,arr){
var bool = arr.indexOf(v,i+1);
if(bool === -1){
result.push(v);
}
})
return result;
};
var a = ['abc','abcd','sss','2','d','t','2','ss','f','22','d'];
var b = a.distinct()
console.log(b.toString());
输出结果:
shift() 和pop()一样,不同的是操作的是开头删除的元素;
var s_ = [1,2,3,4,5];
s_.shift(); //a:[2,3,4,5]
console.log(s_)
输出结果:
unshift: 在集合开头添加一个或更多元素,并返回新的长度
var shuzu = [1,2,3,4,5];
shuzu.unshift();//[1, 2, 3, 4, 5]
shuzu.unshift("cc");//["cc", 1, 2, 3, 4, 5] 返回长度6
shuzu.unshift("aaa");//["aaa", "cc", 1, 2, 3, 4, 5] 返回长度7
输出结果:
push:在集合中添加元素,并返回新的长度
var pu_ = [1,2,3,4,5];
pu_.push(6);//[1, 2, 3, 4, 5, 6]
pu_.push('xx');//[1, 2, 3, 4, 5, 6, "xx"] 返回长度7
输出结果:
pop:从集合中把最后一个元素删除,并返回这个元素的值
删除最后一个元素,针对老数组是删除最后一个,针对新数组是返回最后一个 pop
var arr6=[1,2,3,4,5]
var arr7=arr6.pop();
console.log(arr6);
console.log(arr7);
输出结果:
reverse 数组翻转,并返回翻转后的原数组,原数组翻转了
var fanzhuan = [1,2,3,4,5];
fanzhuan.reverse()//a:[5, 4, 3, 2, 1] 返回[5, 4, 3, 2, 1]
console.log(fanzhuan)
输出结果:
join() 方法将数组的所有元素组成一个字符串
var arry=[1,2,3,4,5]
var str = arry.join("-");
console.log(typeof str+" "+str);
返回结果:
splice() 方法用于插入、删除或替换数组的元素。注意:这种方法会改变原始数组!
语法:array.splice(index,howmany,item1,.....,itemX)
index 必需。规定从何处添加/删除元素,数组元素的下标,必须是数字
howmany 必需。规定应该删除多少元素。必须是数字,但可以是 "0"
item1,.....,itemX 可选。要添加到数组的新元素
var four = ['a','b','c','d','e'];
four.splice(3,1,10,21,238,99);
console.log(four)
输出结果:
//第一参数是索引(从0开始),第二是长度
var one = ['a','b','c','d','e'];
one.splice(0,2);
console.log(one)
输出结果:
var three = ['a','b','c','d','e']
three.splice(three.length-1,1)
console.log(three)
输出结果:
slice截取(切片)数组 ,得到截取的数组,返回从原数组中指定开始索引(包含)到结束索引(不包含)之间的项组成的新数组,原数组木变 ,索引从0开始
var sl_ = ['a','b','c','d','e'];
sl_.slice(1,3);//["b", "c"]
sl_.slice(0,4);//["a", "b", "c", "d"]
sl_.slice(3,4);//["d"]
输出结果:
五、数组排序
快速排序
//、快速排序 sort
var animal = ['dog','cat','tiger','pig','bird'];
animal = animal.sort();
console.log(animal)
var nums = ['12','2','5','36','4'];
nums = nums.sort();
console.log(nums)
var animal = ['dog','cat','tiger','pig','bird'];
animal = animal.sort();
console.log(animal)
var nums = ['12','2','5','36','4'];
nums = nums.sort();
console.log(nums)
输出结果:
结果数值的排序却不对,那是因为sort()方法排序,是基于ASCII值进行排序的。故它会认为36小于4(因为3的ASCII值小于4的ASCII值),所以要对排序的sort()方法定义一个比较函数:
var nums = ['12','2','5','36','4'];
//定义sort的比较函数
nums = nums.sort(function(a,b){
return a-b;
});
console.log(nums)
这样输出结果就对了
冒泡排序
//冒泡排序
var maopao = [3,46,55,2,5,9,8,4,33,7];
function maopaoSort(arr) {
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr.length-i; j++) {
if (arr[j] < arr[j - 1]) {
var temp;
temp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp; //下沉操作,即交换数组值
}
}
// console.log(arr)
// console.log('这是第'+(i+1)+'次排序结果'+'</br>')
}
}
maopaoSort(maopao);
console.log(maopao)
var maopao = [3,46,55,2,5,9,8,4,33,7];
function maopaoSort(arr) {
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr.length-i; j++) {
if (arr[j] < arr[j - 1]) {
var temp;
temp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp; //下沉操作,即交换数组值
}
}
// console.log(arr)
// console.log('这是第'+(i+1)+'次排序结果'+'</br>')
}
}
maopaoSort(maopao);
console.log(maopao)
输出结果
插入排序
//插入排序
var charu = [3,26,15,2,5,9,8,4,66,7];
function charuSort(arr) {
var result= [];
result.push(arr[0]); //将第一个数最为基准
// console.log('第一次排序将数组首个数字放入result结果集'+'</br>');
for (var i = 1; i < arr.length; i++) {
if (arr[i] > result[result.length - 1]) { //如果后来的数比基准数大,直接放到最后面
result[result.length] = arr[i]; //也可以写成result.push(arr[i]);
}
for (var j = result.length;j > 0 && arr[i]<result[j - 1];j--){ //逐个向前比较,找到比自己大的则交换位置
result[j] = result[j - 1];
result[j - 1] = arr[i];
}
// console.log(result+'----');
// console.log('这是第'+(i+1)+'次排序结果'+'</br>')
}
return result;
}
charuSort(charu);
console.log(charuSort(charu))
输出结果:
六、typeof 用来判定目标是什么类型。
console.log(typeof(10));
console.log(typeof('abc'));
console.log(typeof(true));
console.log(typeof(x));
console.log(typeof(function(){}))
输出结果: