关键方法:通过value查index索引
$.inArray(e,arr,[,fromIndex]) 通过元素查找索引值: 返回值,对应的索引;无则返回-1
介绍$.inArray
关键方法: arr.includes(val) 返回对应布尔值
可用来判断数组中是否含有对应元素,当然该方法es6,可能部分浏览器不支持,可以采取indexOf判断,有则返回第一次出现的索引位置,无则返回-1 ;当然还有lastIndexOf倒着判断的。这两个方法其实都没includes好用,尽量用最好的哦。
数组创建的两种方式和比较
1.使用构造函数:
var arr1 = new Array(); // []
var arr2 = new Array(20); //当只有一个数字类型,表示数组的长度,且均为空数组(empty*20)
var arr3 = new Array('a','b','c'); //直接填数据打印: ["a", "b", "c"]
2.使用字面量:
var a1 = []; // []
var a2 = [20]; //[20]
var a3 = [1,2,3]; //[1,2,3]
推荐字面量形式,准确而方便!!!
join(type):拼接数组 => (原数组不变)
将数组中的元素变成字符串,以type参数为分隔符,省略参数默认以逗号隔开,只接收一个参数
var arr = [1,2,3];
arr.join() // "1,2,3"
arr.join('') // "123"
arr.join(' ') // "1 2 3"
arr.join('-') // "1-2-3"
封装的方法: 通过join()方法可以实现重复字符串,类似于字符串方法repeat(num)
repeatString('123',5) // "123123123123123"
function repeatString(str,n){
return new Array(n+1).join(str)
}
push() 和 pop() :添加和删除(末尾) => (原数组改变)
push():可以接收任意数量的参数,把它们添到数组的末尾 返回:修改后数组的长度;
pop(): 删除数组末尾的一项,改变数组长度 返回:被删除的项;
var arr = [1,2,3];
var add = arr.push([4,5]); // 4 [1,2,3,[4,5]]
var del = arr.pop(); // [4,5] [1, 2, 3]
unshift() 和 shift() :添加和删除(开头) => (原数组改变)
unshift: 将参数添加到原数组的开头,并返回数组的长度 (改变原数组)
shift: 删除原数组的的第一项,并返回删除元素的值,如果数组为空,就返回 undefined (改变原数组)
var arr = [2,3,4];
var add = arr.unshift('1'); // 4 [1,2,3,4]
var del = arr.shift(); // "1" [2,3,4]
sort(): 排序 => (原数组改变)
按照升序排列数组:最小的在最前面 (改变原数组)
var arr = [23,12,25,34,11];
从小到大: arr.sort((a,b)=>{return a-b}); //[11, 12, 23, 25, 34]
从大到小: arr.sort((a,b)=>{return b-a}); //[34, 25, 23, 12, 11]
reverse():反转数组项 => (原数组不变)
反转数组项的顺序。(原数组不变)
var arr = [13, 24, 51, 3];
console.log(arr.reverse()); //[3, 51, 24, 13]
console.log(arr); //[3, 51, 24, 13](原数组改变)
concat():拼接数组项 => (原数组不变)
先创建当前数组的一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新创建的数组
若无参数,则是复制当前数组并返回副本. (原数组不变)
特别注意:concat()只能去除一层数组,二维数组的里面不能去除,三维同理.
var arr = [1,2,3,4,5];
var arrCopy = arr.concat(9,[1,12]); // [1,2,3,4,5,9,1,12];
var arrCopy1 = arr.concat(9,[2,3,[34]]) // [1, 2, 3, 4, 5, 9, 2, 3, [34]]
slice():剪切数组 => (原数组不变)
slice([startIndex,endIndex)) => 包含开始,不包含结尾
var a = [1,2,3,4,5,6];
var w = a.slice(1) // 一个正参数:表示从当前索引一直到最后 [3, 4, 5, 6]
var b = a.splice(0,1) //[1]
var c = a.slice() // 无参数: 原数组
var d = a.slice(-3) // 一个负的参数:倒数对应数字位置到最后 [4, 5, 6]
var e = a.slice(-3,-1) //存在负数,则该数字便不是索引,是位置(即自然数从1开始)[4, 5]
var f = a.slice(-5,-2) // 负数时可认为不是索引,但第二个参数仍不包含 [2, 3, 4]
var e = a.slice(-3,4) // [4, 5]
//特别:
// 全正值或全负值,参数1 > 参数2 ,则为空;
var cc = a.slice(-3,-4);
var cc1 = a.slice(4,3);
// 当一正一负 时,在从前数 和从后数 为同一个值时,则包含参数2位置的值
var dd = a.slice(-3,3) // [4]
splice(): 修改或删除 => (原数组改变)
splice(index,length,新增元素1,新增元素2,...);
// 表示从index开始删除length个元素,并从index索引位置开始新增元素1~N,
// 返回值:被剪切的的元素组成的数组
var a = [1,2,3,4];
var bb = a.splice(1,1) // [2]
console.log(a)// [1,3,4]
var cc = a.splice(1,2) // [2,3]
console.log(a) // [1,4]
var dd = a.splice(1,2,4,[7,6,5]); // [2, 3]
console.log(a) // [1, "a", Array(3), 4]
indexOf()和lastIndexOf():返回对应位置index => (不改变原数组)
arr.indexOf(value):数组从左往右对应值所出现的第一次的索引位置;无 则返回-1
arr.lastIndexOf(value):数组从右往左对应值所出现的第一次的索引位置;无 则返回-1
以上是为了获取索引位置,如果只是为了判断是否存在,推荐使用:
es6中includes方法,返回布尔值
reduce()和reduceRight():数组求和 => (不改变原数组)
reduce(function(){},firstValue) 从头到尾累加
reduceRight(function(){},lastValue) 从尾到头累加
// reduceRight 同参数
reduce(function(){preVal,curVal,index,arr}{
preVal:上一次调用返回的值,或者是提供的初始值(initVal);
curVal:数组中当前正在被处理的数组项;
index:当前被处理的数组项的对应索引;
arr: 当前所处理的整个数组项;
initVal:初值,非必写项;
},[initVal])
说明:
回调函数第一次执行时,preValue 和 curValue 可以是一个值,
如果 initialValue 在调用 reduce() 时被提供,那么第一个 preValue 等于 initialValue ,并且curValue 等于数组中的第一个值;
如果initialValue 未被提供,那么preValue 等于数组中的第一个值,curValue等于数组中的第二个值。
数组的循环遍历方法:原文
1.$.each(callback)/$(dom).each(callback)
2.arr.forEach(callback) 遍历数组(不改变原数组)
3.arr.map(callback) 使用一个数组, 利用某规则映射得到一个新数组(不改变原数组)
4.arr.filter(callback) 找出符合条件的元素(不改变原数组)
5.arr.every(callback) 判断数组中的所有元素是否都符合某种条件(不改变原数组)
6.arr.some(callback) 判断数组中是否含有符合条件的元素(不改变原数组)
7. $.grep(array, callback, [invert]) 使用过滤函数过滤数组元素。
ES6新增方法:
1.扩展运算符(...)
console.log([1,...[2,3,4,5,6]]) // [1,2,3,4,5,6]
与解构赋值结合:
const [aa,...bb] = [[1,2],3,2,4,5,6,5]; //aa:[1,2] bb:[3,2,4,5,6,5]
可将字符串转化为数组:
[...'hello'] // ["h","e","l","l","o"]
2.Array.from()
// Array.from方法用于将两类对象转为真正的数组:类似数组的对象 和 可遍历的对象
var arrLike = {
'0':'a',
'1':'b',
'2':'c',
length:'3'
}//这里必须包含有所需的对象和length
var arr = Array.from(arrLike); //['a','b','c']
3.Array.of():用于将一组值,转换为数组。
Array.of(1,2,3,4,5) // [1,2,3,4,5]
//此方法的主要目的在于:是弥补了数组构造函数Array()的不足.因为参数个数不同,会导致结果有差异
Array() // []
Array(3) // [,,,]
Array(1,2) // [1,2]
4.copyWithin(target,start,end)
//在当前数组内部,将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组;(改变了原数组)
target:要被替换的起始位置;start:准备去做替换内容的起始位置,end:准备去做替换内容的终止位置(不包括)
var arr = [1,2,3,4,5];
arr.copyWithin(0,3,4); // [4,2,3,4,5]
arr.copyWithin(0,2); // [3,4,5,4,5]
arr.copyWithin(0,2,4) // [3,4,3,4,5]
//由上例子可以看出:参数2和参数3之间不管有几个,都会从参数1的位置开始,一直覆盖到所选取的内容的全部
5.数组find()和findIndex():接受三个参数,依次为当前的值、当前的位置和原数组
数组实例的find方法,用于找出(第一个符合条件)的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员。如果没有符合条件的成员,则返回undefined。
findIndex()方法则是在满足对应条件时,返回的是对应的索引值
var arr = [1,2,3,4,5,6];
arr.find(function(curVal,curIndex,arr){
//curVal :当前值;curIndex:当前索引,arr:当前整个数组
return curVal>3 //4 只打印第一个满足的值
});
arr.findIndex(function(curVal,curIndex,arr){
return curVal === 3 ; //2 索引位置
});
6.fill():使用给定的值,填充数组内容
//fill方法接收第一个参数(要填充的内容),还可以接受第二个和第三个参数,用于指定填充的起始位置和结束位置。
["a","r","c"].fill(7) // [7,7,7]
['a','b','c'].fill(Math.random(),1,2) //["a", 0.8563910543783992, "c"]
7.includes():方法返回一个布尔值,表示某个数组是否包含给定的值,与字符串的includes方法类似
[1, 2, 3].includes(2) // true
[1, 2, 3].includes(4) // false
[1, 2, NaN].includes(NaN) // true
8. entries(),keys()和values()——用于遍历数组。es6
let obj = { a: 1, b: 2, c: 3 };
for (let key of Object.keys(obj)) {
console.log(key); // 'a', 'b', 'c'
}
for (let value of Object.values(obj)) {
console.log(value); // 1, 2, 3
}
for (let [key, value] of Object.entries(obj)) {
console.log([key, value]); // ['a', 1], ['b', 2], ['c', 3]
}