基本功要扎实,且适时的使用方法能极大提升代码简洁度与效率
如何根据不同情况选择更合适的方法?(对方法有自己的分类)
创建:
let a = new Array
let b = new Array(20)
let c = new Array(1,2,3)
let d = []
let f = [1,2,3]
自己的分类整理:
增删改(头2尾3全局3)
查找2排序2判断3遍历3定位1映射1 转换1
ES6:替换分隔符1 组内复制1 对象转数组1
find、sort、every、some 等函数的传参是带参与逻辑最终返回布尔值的函数参数 作为条件给函数本身
foreach 参数相同但函数不需要返回值,直接写逻辑
reduce 多了一个累加计算的初始值total,也就是第一个元素,函数从第二个元素开始遍历
map 同上但返回值变为映射出的数组项
需遍历数组的函数参数大都是 val、index、arr三个
增删改替换:
数组头尾增删:
push arr1.push();
数组末尾添加一或多项
concat arr1.concat([7,[8,9]])
将参数拆解一项项添加到数组中并返回★新数组(只能拆解一层数组)
pop arr1.pop();
数组末尾删除最后一项
unshift arr1.unshift(0);
数组头添加一或多项
shift arr1.shift();
数组头删除第一项
数组全局增删改:
slice arr1.slice(-4,-1)
; 返回起始和结束位置之间的项组成的★新数组
splice arr1.splice(2,0,4,6)
从哪里开始,删除几项,插入项,操作这几个参数达到删插替换
并返回★新数组
fill arr.fill(value, start, end)
用Value当作一项,替换掉数组内的元素,可以指定替换下标范围。
-查找:
arr1.find((it)=> {return it.class===1})
遍历数组,返回符合参数函数条件(即参数函数返回给find函数true)的数组的第一个元素的值。排序:
arr1.sort(compare);
根据参数函数逻辑对数组项排序 arr1.reverse();
反转数组项的顺序判断数组:
arr1.includes(3)
要查的项,替代查找NaN会判断错误的indexofarr1.every((x) => {return x>0})
依次判断数组项,全部满足条件返回T,否则返回Farr1.some((x) => {return x>0})
依次判断数组项,任一个满足条件返回T,否则返回F遍历迭代:
arr1.forEach((x, index, a) => {});
遍历的数组项;当前索引,数组本身,无返回arr1.reduce() (function( total, cur, index, array){ });
遍历的数组项 total代表第一个元素,cur从左2开始,构建一个最终返回的值定位:
indexOf() arr1.indexOf()
要查的项,查找起始索引 从前往后
lastIndexOf() arr1.lastIndexOf()
要查的项,查找起始索引 从后往前
映射:
arr.map((it) => {return {name:it.name}}) arr1.map((item) =>{return item*item})
数组字符串转换
let a = [1,2,3];a.join('');//'123'
在数组项中间插入参数值并返回★新数组let a = [1,2,3];a.toString();//''1,2,3''
返回字符串理解:将参数添加到调用数组的每个元素中且返回字符串。
当数组为空返回参数插入空数组后的字符串。
join():将数组的元素组起一个字符串,以separator为分隔符,
省略的话则用默认用逗号为分隔符,该方法只接收一个参数:即分隔符。
let arr1 = [1,2,3,4,5]
arr1.join("-")
new Array(3).join("实现重复字符串")
3为重复次数 join参数为重复的字符串
理解:
增加一或多项:unshift()在数组头 push()在数组末尾
删除一项:shift()在数组头 pop()在数组末尾,可指定删除项
let arr1 = [1,2,3,4,5];
arr1.push(6);
arr1.pop();
arr1.unshift(0);
arr1.shift();
理解:
let arr1 = [5,1,9,7,3,6,4,2];
arr1.sort();
function compare(value1, value2) {
if (value1 < value2) {
return 1;
} else if (value1 > value2) {
return -1;
} else {
return 0;
}
}
arr1.sort(compare);
理解:反转数组项的顺序。
let arr1 = [1,2,3,4,5];
arr1.reverse();
理解:
let arr1 = [1,2,3,4,5];
arr1.concat(6);// [1, 2, 3, 4, 5, 6]
arr1.concat(7,[8,9])//[1, 2, 3, 4, 5, 7, 8, 9]
注意:原数组arr1未被修改
arr1.concat([7,[8,9]])
理解:
let arr = [1,3,5,7,9,11];
let arrCopy = arr.slice(1);
let arrCopy2 = arr.slice(1,4);
let arrCopy3 = arr.slice(1,-2);
let arrCopy4 = arr.slice(-4,-1);
console.log(arr); //[1, 3, 5, 7, 9, 11](原数组没变)
console.log(arrCopy); //[3, 5, 7, 9, 11]
console.log(arrCopy2); //[3, 5, 7]
console.log(arrCopy3); //[3, 5, 7]
console.log(arrCopy4); //[5, 7, 9]
理解:
用参数理解:从哪里开始,删除几项,插入项
操作这几个参数达到删插替换
var arr = [1,3,5,7,9,11];
var arrRemoved = arr.splice(0,2);
console.log(arr); //[5, 7, 9, 11]
console.log(arrRemoved); //[1, 3]
var arr = [1,3,5,7,9,11];
var arrRemoved2 = arr.splice(2,0,4,6);
console.log(arr); // [5, 7, 4, 6, 9, 11]
console.log(arrRemoved2); // []
var arr = [1,3,5,7,9,11];
var arrRemoved3 = arr.splice(1,1,2,4);
console.log(arr); // [5, 2, 4, 4, 6, 9, 11]
console.log(arrRemoved3); //[7]
理解:
理解:
var arr = [1, 2, 3, 4, 5];
arr.forEach(function(x, index, a){
console.log(x + '|' + index + '|' + (a === arr));
});
// 输出为:
// 1|0|true
// 2|1|true
// 3|2|true
// 4|3|true
// 5|4|true
理解:根据函数映射数组每一项,对每一项计算抽取等
var arr = [1, 2, 3, 4, 5];
var arr2 = arr.map(function(item){
return item*item;
});
console.log(arr2); //[1, 4, 9, 16, 25]
let arr1 = [{class:1,name:"jack",sex:0},{class:2,name:"uzi",sex:0},{class:3,name:'loser',sex:0},{class:1,name:'Ruth',sex:1}]
arr1.map((it) => {return {name:it.name}})
arr1.map((it) => {if(it.class===1){return it.name}})
//这里的按条件返回数组用过滤更合适
var numbers = [1, 2, 3, 4];
var filteredNumbers = numbers.map(function(num, index) {
if(index < 3) {
return num;
}
});
// filteredNumbers is [1, 2, 3, undefined]
理解:
let arr1 = [{class:1,name:"jack",sex:0},{class:2,name:"uzi",sex:0},{class:3,name:'loser',sex:0},{class:1,name:'Ruth',sex:1}]
arr1.find((it)=> {return it.class===1})
// {class: 1, name: "jack", sex: 0}
理解:
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var arr2 = arr.filter(function(x, index) {
return index % 3 === 0 || x >= 8;
});
console.log(arr2); //[1, 4, 7, 8, 9, 10]
let arr1 = [{class:1,name:"jack",sex:0},{class:2,name:"uzi",sex:0},{class:3,name:'loser',sex:0},{class:1,name:'Ruth',sex:1}]
arr1.filter((x,index) => {return x.class===1})
理解:
let arr = [1, 2, 3, 4, 5];
arr.every((x) => {return x>0})//t
arr.every((x) => {return x>5})//f
arr.every((x) => {return x>1})//f
理解:
let arr = [1, 2, 3, 4, 5];
arr.some((x) => {return x>5})//f
arr.some((x) => {return x>4})//t
理解:
var values = [1,2,3,4,5];
var sum = values.reduceRight(function(prev, cur, index, array){
return prev + cur;
},10);
console.log(sum); //25